ReactJS - Интеграция с другими библиотеками

Здравствуйте, будущие разработчики React! Я рад помочь вам окунуться в захватывающий мир интеграции React с другими библиотеками. Как кто-то, кто teaches компьютерные науки уже много лет, я могу сказать, что это умение похоже на умение мастера-шеф-повара - знать, как смешивать разные ингредиенты (или в нашем случае, библиотеки), чтобы создать что-то потрясающее!

ReactJS - Integrating With Other Libraries

Почему интегрировать React с другими библиотеками?

Прежде чем мы углубимся, давайте поговорим о том, почему мы хотим смешивать React с другими библиотеками. Представьте, что вы строите treehouse. React - это ваша прочная основа и стены, но иногда вам нужны особые инструменты для окон или модный slidе. Вот где на помощь приходят другие библиотеки - они добавляют дополнительную функциональность, которую React не предоставляет из коробки.

Интеграция на основе CreateRoot

Давайте начнем с метода CreateRoot, который похож на установку главного входа в наш treehouse.

Что такое CreateRoot?

CreateRoot - это современный способ отрисовки React компонентов. Это как посадить семя для роста нашего React дерева.

Вот простой пример:

import { createRoot } from 'react-dom/client';
import App from './App';

const container = document.getElementById('root');
const root = createRoot(container);
root.render(<App />);

В этом коде:

  1. Мы импортируем createRoot из React DOM.
  2. Мы находим контейнер в нашем HTML (обычно это div с id 'root').
  3. Мы создаем root с помощью этого контейнера.
  4. Мы отрисовываем наш главный компонент App в этом root.

Интеграция библиотеки для диаграмм

Теперь давайте представим, что мы хотим добавить классную диаграмму в нашу React приложение. Мы будем использовать библиотеку Chart.js в качестве примера.

Сначала установите Chart.js:

npm install chart.js

Теперь давайте создадим компонент, который использует Chart.js:

import React, { useEffect, useRef } from 'react';
import Chart from 'chart.js/auto';

function ChartComponent() {
const chartRef = useRef(null);

useEffect(() => {
if (chartRef.current) {
new Chart(chartRef.current, {
type: 'bar',
data: {
labels: ['Красный', 'Синий', 'Желтый', 'Зеленый', 'Фиолетовый', 'Оранжевый'],
datasets: [{
label: '# Голосов',
data: [12, 19, 3, 5, 2, 3],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
}
}
});
}
}, []);

return <canvas ref={chartRef} />;
}

export default ChartComponent;

Этот код:

  1. Создает функциональный компонент.
  2. Использует useRef для создания ссылки на наш элемент canvas.
  3. Использует useEffect для создания новой диаграммы, когда компонент монтируется.
  4. Возвращает элемент canvas, в который Chart.js будет отрисовывать диаграмму.

Теперь вы можете использовать этот компонент в вашем основном приложении:

import React from 'react';
import ChartComponent from './ChartComponent';

function App() {
return (
<div>
<h1>Моя классная диаграмма</h1>
<ChartComponent />
</div>
);
}

export default App;

Интеграция на основе Ref

Теперь давайте поговорим о ref-интеграции. Refs в React похожи на бейджи для наших элементов - они помогают нам находить и взаимодействовать с конкретными частями нашего UI.

Что такое Refs?

Refs предоставляют способ доступа к DOM-узлам или React элементам, созданным в методе render. Они как прямая линия к конкретной части вашего компонента.

Вот простой пример:

import React, { useRef, useEffect } from 'react';

function TextInput() {
const inputRef = useRef(null);

useEffect(() => {
inputRef.current.focus();
}, []);

return <input ref={inputRef} type="text" />;
}

В этом коде:

  1. Мы создаем ref с помощью useRef.
  2. Мы прикрепляем этот ref к нашему элементу input.
  3. В useEffect мы используем ref, чтобы фокусировать ввод, когда компонент монтируется.

Интеграция библиотеки для выбора даты

Давайте интегрируем библиотеку для выбора даты под названием Flatpickr с помощью refs:

Сначала установите Flatpickr:

npm install flatpickr

Теперь давайте создадим компонент, который использует Flatpickr:

import React, { useRef, useEffect } from 'react';
import flatpickr from 'flatpickr';
import 'flatpickr/dist/flatpickr.css';

function DatePicker() {
const datePickerRef = useRef(null);

useEffect(() => {
flatpickr(datePickerRef.current, {
dateFormat: 'Y-m-d',
onChange: function(selectedDates, dateStr, instance) {
console.log(dateStr);
}
});
}, []);

return <input ref={datePickerRef} type="text" placeholder="Выберите дату..." />;
}

export default DatePicker;

Этот код:

  1. Создает ref для нашего элемента input.
  2. Использует useEffect для инициализации Flatpickr на нашем input, когда компонент монтируется.
  3. Настраивает Flatpickr с некоторыми параметрами, включая коллбэк для выбора даты.

Теперь вы можете использовать этот компонент в вашем приложении:

import React from 'react';
import DatePicker from './DatePicker';

function App() {
return (
<div>
<h1>Выберите дату</h1>
<DatePicker />
</div>
);
}

export default App;

Интеграция jQuery плагина

Наконец, давайте поговорим о интеграции jQuery плагинов, конкретно плагин Slick carousel. Теперь, я знаю, что вы подумали - "jQuery? Разве это не старая новость?" Ну, иногда старые инструменты лучше всего подходят для работы!

Настройка Slick

Сначала установите jQuery и Slick:

npm install jquery slick-carousel

Теперь давайте создадим компонент Slider:

import React, { useRef, useEffect } from 'react';
import $ from 'jquery';
import 'slick-carousel';
import 'slick-carousel/slick/slick.css';
import 'slick-carousel/slick/slick-theme.css';

function Slider() {
const sliderRef = useRef(null);

useEffect(() => {
$(sliderRef.current).slick({
dots: true,
infinite: true,
speed: 500,
slidesToShow: 1,
slidesToScroll: 1
});
}, []);

return (
<div ref={sliderRef}>
<div><h3>1</h3></div>
<div><h3>2</h3></div>
<div><h3>3</h3></div>
<div><h3>4</h3></div>
<div><h3>5</h3></div>
</div>
);
}

export default Slider;

Этот код:

  1. Импортирует jQuery и плагин Slick carousel.
  2. Создает ref для нашего контейнера слайдера.
  3. Использует useEffect для инициализации Slick carousel, когда компонент монтируется.
  4. Возвращает div с содержимым слайдера.

Теперь вы можете использовать этот компонент в вашем приложении:

import React from 'react';
import Slider from './Slider';

function App() {
return (
<div>
<h1>Мой классный слайдер</h1>
<Slider />
</div>
);
}

export default App;

Заключение

И вот мы и добрались до этого, ребята! Мы отправились в путешествие по земле React интеграции, от создания корней до ref и даже до использования магии jQuery. Помните, что интеграция библиотек - это расширение возможностей React, как добавление суперсил к вашим уже потрясающим навыкам React.

Вот быстрый обзор методов, которые мы рассмотрели:

Метод Случай использования Пример
CreateRoot Настройка главного React приложения Интеграция Chart.js
Ref-based Доступ к конкретным DOM элементам Flatpickr date picker
jQuery Plugin Использование jQuery-библиотек Slick carousel

Продолжайте практиковаться, продолжайте исследовать и, самое главное, продолжайте наслаждаться React! Кто знает, какие потрясающие приложения вы создадите в следующий раз? Счастливого кодинга!

Credits: Image by storyset