Здесь мы хотим представить вам шаги, которые необходимо предпринять, если вы хотите интегрировать чистую библиотеку JavaScript в собственное приложение React. Мы следуем рекомендациям, изложенным в официальном руководстве React Интеграция с другими библиотеками (https://reactjs.org/docs/integrating-with-other-libraries.html). В этом руководстве используется пример RealTimeChart (https://mindfusion.eu/samples/javascript/chart/RealTimeStockChart/RealTimeStockChart.html), который MindFusion разработал для JavaScript и создает с нуля такую ​​же диаграмму в React. Мы снова используем библиотеку JavaScript для диаграмм и индикаторов от MindFusion (https://mindfusion.eu/javascript-chart.html).

Шаги, описанные ниже, универсальны, и вы можете следовать им, если хотите интегрировать любую библиотеку JS в свой компонент React.

И. Создайте проект React

Мы создаем пустой проект React, используя библиотеку npm create-react-app, которая доступна по адресу https://www.npmjs.com/package/create-react-app. Если вы новичок в этом инструменте, их официальная документация доступна по адресу https://create-react-app.dev/docs/getting-started/.

npx create-react-app realtimechart
cd realtimechart
npm start

Мы создаем проект под названием realtimechart и заходим в его каталог. Команда запуска открывает приложение, которое является пустым родным приложением React.

Устанавливаем модуль диаграммы JavaScript из npm (https://www.npmjs.com/package/chart-library)

npm i chart-library

Это все, что нам нужно для установки. Нам требуется jQuery, но он автоматически устанавливается приложением create-react-app, поэтому мы готовы к установке модулей и начинаем писать диаграмму в реальном времени.

II. Ссылка на модуль диаграммы

Мы создаем пустой файл JavaScript, который помещаем в папку «src» нашего проекта. Туда мы импортируем библиотеку React:

import React, { Component } from ‘react’;

Вопрос в том, как нам импортировать библиотеку Charting, которая находится в подпапке «chart-library» в папке node-modules? Мы импортируем его таким образом:

import * as Charting from ‘chart-library’;

Если есть дополнительные модули, например те, которые требуются библиотеке диаграмм, вы импортируете их следующим образом:

import MindFusion from ‘mindfusion-common’

Здесь мы импортируем все классы из вспомогательного общего npm-пакета MindFusion (https://www.npmjs.com/package/mindfusion-common) как MindFusion.

III. Диаграмма

Теперь мы создаем компонент RealTimeChart React в пустом файле RealTimeChart.js:

export class RealTimeChart extends Component {
}

Сначала мы реализуем метод рендеринга. Он возвращает элементы HTML, которые мы хотим, чтобы наш компонент имел. В этом случае нам нужно добавить только Canvas. Диаграмма MindFusion JavaScript требует, чтобы экземпляр Canvas отображался на:

render() {
 return (
   <div>
       <canvas width=”1000px” height=”800px” ref={this.el}></canvas>
   </div>
  );
 }

Обратите внимание, что мы добавляем атрибут ref к элементу canvas. Это имя, через которое мы сможем обращаться к элементу canvas в остальной части кода React. Холст инициализируется в render(), но мы должны иметь доступ к нему и в других методах. Таким образом, мы получим к нему доступ через «this.el».

Теперь мы добавляем конструктор. В нем мы создаем ссылку на холст диаграммы, используя метод createRef React, и сохраняем переменную с именем chart в состоянии компонента. Первоначально значение этого состояния равно нулю:

constructor(props) {
   super(props);
   this.el = React.createRef();
  this.state = {
    chart: null
   }
 }

Затем мы добавляем метод componentDidMount, в котором мы должны выполнить инициализацию и настройку диаграммы. В этом методе мы получаем ссылку на экземпляр this.el и можем использовать его для создания объекта диаграммы JS:

componentDidMount() {
 var stockChart = new Charting.MindFusion.Charting.Controls.CandlestickChart(this.el.current);
 
 stockChart.title = “The Big Corporation”;
 stockChart.theme.titleFontSize = 16;
 stockChart.candlestickWidth = 12;
 stockChart.showLegend = false;
…………………
 …………………
 …………………
}

В componentDidMount мы также назначаем вновь созданный экземпляр диаграммы объекту состояния. Это позволяет нам получить ссылку на объект диаграммы JavaScript в любом месте кода:

this.setState({ chart: stockChart, data: dataList, intervalId: intervalId });

Здесь мы сохраняем три переменные в состоянии компонента React: биржевую диаграмму, список с данными диаграммы и экземпляр таймера intervalId. Нам нужен таймер, потому что мы хотим, чтобы наша диаграмма обновлялась через равные промежутки времени. В нашем случае — 1 минута или 6000 миллисекунд.

Вот как мы создаем таймер:

var intervalId = setInterval(this.updateStock.bind(this), 60000);

Итак, componentDidMount — это место, где вы получаете ссылку на элементы DOM, созданные в render(). Это место, где вы можете разместить важные данные в состоянии компонента, к которым вы будете обращаться в других методах. Здесь вы также вызываете другие методы, необходимые для сборки компонента. У нас есть один, и это метод, который анализирует данные диаграммы. Он называется updateStock, и мы вызываем его в конце componentDidMount:

this.updateStock();

Обратите внимание, что все методы, которые добавляются в наш компонент React, вызываются с помощью «this».

IV. Очистить данные

Наконец, мы используем метод componentWillUnmount для очистки интервала, который использовался для обновления диаграммы:

componentWillUnmount() {
 clearInterval(this.state.intervalId);
 }

Это место, где вы очищаете все прослушиватели событий и другие данные, экземпляры объектов, такие как таймер, которые вы создаете в componentDidMount.

И это идея вкратце. Вы узнали основы того, как интегрировать стороннюю библиотеку, написанную на чистом JavaScript, в собственное приложение React. Пример проекта доступен для скачивания по адресу:

http://mindfusion.eu/samples/javascript/chart/realtimechart-react.zip

О MindFusion JavaScript Gauges: набор из двух элементов управления: овальный и прямоугольный, с возможностью добавления неограниченного количества шкал и датчиков. Все элементы датчика поддерживают полную настройку внешнего вида. Также возможен пользовательский рисунок, где вы можете заменить визуализацию элемента датчика по умолчанию или добавить к ней. Элементы управления датчиками включают в себя множество примеров, которые предлагают прекрасные реализации самых популярных приложений датчиков: термометр, приборная панель автомобиля, функции, компас, часы, счетчик затрат и многое другое.
Датчики для JavaScript являются частью диаграмм и информационных панелей MindFusion. для JavaScript. Подробности на https://mindfusion.eu/javascript-chart.html.