Поиск по сайту:

Как добавить диаграммы в SolidJS с помощью ApexCharts


Автор выбрал программу Write for DOnations.

Введение

Визуализация данных предоставляет пользователям интуитивно понятный способ узнать, что происходит в системе их веб-приложений. SolidJS.

SolidJS — это библиотека JavaScript для создания пользовательских интерфейсов. Поскольку SolidJS основан на том же дизайне, что и библиотеки JavaScript, например, Vite является основным инструментом сборки, упаковывая ваше приложение в JavaScript, чтобы оно было компактным.

ApexCharts — это настраиваемая библиотека диаграмм JavaScript с открытым исходным кодом для создания интерактивных визуализаций для веб-приложений. Вы можете интегрировать ApexCharts со многими популярными платформами JavaScript, включая SolidJS. ApexCharts предлагает широкий выбор гибких и адаптивных диаграмм, которые можно отображать на нескольких экранах.

В этом руководстве вы интегрируете ApexCharts в приложение SolidJS для визуализации данных. Вы разработаете приложение, которое извлекает данные о погоде из OpenWeatherMap API и отображает их в виде гистограммы.

Предпосылки

Чтобы следовать этому руководству, вам понадобится следующее:

  • На вашем компьютере установлен Node.js, который можно настроить, следуя руководству по установке Node.js.
  • Веб-браузер, например Chrome.
  • (Необязательно) Базовые знания библиотеки SolidJS. Вы можете ознакомиться с документацией по SolidJS.
  • (Необязательно) Текстовый редактор, поддерживающий подсветку синтаксиса JavaScript, например Atom. В этом руководстве используется редактор командной строки nano.

Шаг 1 — Создание проекта SolidJS

На этом шаге вы создадите проект SolidJS и установите все необходимые зависимости для создания диаграмм. Вы создадите приложение SolidJS с шаблоном Vite, содержащим необходимый шаблонный код.

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

  1. mkdir charts
  2. cd charts

В этом руководстве каталог будет называться charts, но вы можете называть его как хотите.

Затем запустите команду npx degit, чтобы клонировать шаблон из репозитория solid/js/templates/js в папку вашего проекта:

  1. npx degit solidjs/templates/js solid-chart

Вы можете заменить solid-chart на желаемое имя вашего приложения.

Примечание. TypeScript — это надмножество JavaScript, предлагающее дополнительную статическую типизацию, классы и интерфейсы. Он также предлагает улучшенное завершение кода и IntelliSense для JSX. Если вы предпочитаете использовать TypeScript, выполните следующие команды:

  1. npx degit solidjs/templates/ts solid-chart

Вы получите тот же вывод для шаблона /ts, что и для шаблона /js.

Вы получите следующий вывод:

Output
> cloned solidjs/templates#HEAD to solid-chart

Этот вывод подтверждает, что шаблон был сохранен на вашем компьютере. После того как вы клонировали шаблон в папку своего проекта, вы можете перейти в папку шаблона и установить необходимые зависимости для проекта:

  1. cd solid-chart
  2. npm install

NPM установит необходимые зависимости для проекта.

Для интеграции диаграмм в SolidJS вам понадобятся еще две зависимости: Solid-ApexCharts.

ApexCharts — это библиотека диаграмм JavaScript для создания интерактивных визуализаций для веб-приложений. ApexCharts поддерживает четырнадцать диаграмм, включая столбчатые, линейные, площадные, круговые, столбцовые, прямоугольные, подсвечники, тепловую карту и другие.

Solid-ApexCharts — это оболочка SolidJS для ApexCharts, позволяющая использовать элементы ApexCharts в качестве компонентов SolidJS.

Запустите эту команду, чтобы установить эти зависимости:

  1. npm install apexcharts solid-apexcharts

Затем запустите сервер разработки с помощью этой команды:

  1. npm run dev

Вы получите вывод, подобный этому:

Output
... vite v2.9.15 dev server running at: > Local: http://localhost:3000/ > Network: use `--host` to expose ready in 605ms.

Теперь ваше приложение будет работать на порту 3000. Откройте браузер и введите URL-адрес http://localhost:3000/ для доступа к стартовой странице SolidJS:

Примечание. Если вы следуете руководству на удаленном сервере, вы можете использовать переадресацию портов для тестирования приложения в браузере.

Пока сервер разработки все еще работает, откройте другой терминал на локальном компьютере и введите следующую команду:

  1. ssh -L 3000:localhost:3000 your_non_root_user@your_server_ip

После подключения к серверу перейдите по адресу http://localhost:3000 в веб-браузере вашего локального компьютера. Держите второй терминал открытым на протяжении оставшейся части этого руководства.

После того, как вы установили все зависимости, вы можете получать данные из API.

Шаг 2 — Получение данных из API

На этом шаге вы будете использовать Fetch API для получения данных из OpenWeatherMap. Вы будете использовать широту определенного места и показывать изменения на диаграмме.

В предпочитаемом вами редакторе откройте файл App.jsx в папке src. В этом руководстве используется редактор командной строки nano:

  1. nano src/App.jsx

Примечание. Если вы использовали шаблон TypeScript на шаге 1, вы не будете использовать файлы .jsx. Вместо этого откройте файлы .tsx для любого файла .jsx на протяжении всего руководства.

Здесь вы получите данные из API и передадите их другому компоненту, чтобы он мог отобразить диаграмму.

Сначала удалите всю информацию, которая была автоматически сгенерирована в файле шаблона.

Затем импортируйте createEffect из solid-js, добавив эту строку:

import { createEffect } from "solid-js";

Теперь вы создадите эффект, когда функция вызывает API. Добавьте эти строки в файл:

...

createEffect(() => {
  const fetchData = async () => {
    const res = await fetch("http://api.openweathermap.org/geo/1.0/direct?q=London&limit=5&appid=2c36818bb5ca9e829313dd736fd15859");
    const data = await res.json();
  };

  fetchData()
});

Асинхронная функция под названием fetchData запрашивает API OpenWeatherMap, используя API Fetch. Эта функция запускается сразу после монтирования компонента App, потому что fetchData вызывается в createEffect. API OpenWeatherMap обычно возвращает массив объектов погоды. Здесь используется ограничение 5. В данных используются только имя и широта (в вызове API запрос — London, а Ключ API — это строка, определяемая appid=).

Поскольку fetchData является асинхронной функцией, вам нужно ожидать ответа. Ответ сохраняется в переменной res, когда она доступна. Как только сервер получает данные, ответ преобразуется в JSON с помощью функции .json() и сохраняется в переменной data.

После извлечения данных следующая задача — сохранить их в сигнале и экспортировать.

Оставаясь в src/App.jsx, импортируйте createSignal из solid-js. Для этого обновите исходный импорт, добавив выделенный текст:

import { createSignal,  createEffect } from "solid-js";
...

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

import { createSignal, createEffect } from 'solid-js';

const [chartData, setChartData] = createSignal({});
...

В Solid Сигналы являются основой реактивности. Они включают в себя динамические значения, поэтому, если вы измените значение Signal, все, что зависит от него, будет обновлено автоматически.

Начальное значение — это параметр, заданный для создания Сигнала, а массив с двумя функциями (геттер и сеттер) — это возвращаемые значения. Первое возвращаемое значение — это не само значение, а геттер, функция, возвращающая текущее значение. Для правильного обновления библиотека должна отслеживать, где считывается этот сигнал. В этом руководстве chartData является методом получения, а setChartData — методом установки. Signal инициализируется пустым объектом.

ApexCharts требует, чтобы вы указали параметры. В этом руководстве вы укажете параметр xaxis, который добавляет массивы data и categories.

Для этого вы создадите массив значений, возвращаемых API, с помощью метода map(). Метод map() вызывает функцию для каждого элемента массива, возвращая результаты в новом массиве. Добавьте выделенные строки в асинхронную функцию fetchData:

...
createEffect(() => {
  const fetchData = async () => {
    const res = await fetch("http://api.openweathermap.org/geo/1.0/direct?q=London&limit=5&appid=2c36818bb5ca9e829313dd736fd15859");
    const data = await res.json();
    
    setChartData({
      series: [
        {
          name: 'Latitudes in London',
          data: data.map((d) => (d.lat))
        }
      ],
      xaxis: {
        categories: data.map((d) => (d.name))
      }
    });
  };

  fetchData()
});

Внутри функции установки setChartData вы указываете значения для series и xaxis Apexcharts.

В массиве series вы указываете значение для свойств name и data. Вы перебираете данные, возвращенные с сервера, используя map(), и передаете значения широты, представленные lat. Это будут значения в каждой диаграмме.

Объект xaxis ожидает свойство categories, которое устанавливается путем итерации по data с помощью метода map() и передавая значения name. Это значение представляет название города на каждой диаграмме.

После того как вы обновили chartData с помощью параметров диаграммы и данных из API, вам необходимо указать стиль и экспортировать его. Добавьте выделенные строки в файл:

import { createSignal, createEffect } from "solid-js";
import styles from './App.module.css';

const [chartData, setChartData] = createSignal({});

createEffect(() => {
  const fetchData = async () => {
    const res = await fetch("http://api.openweathermap.org/geo/1.0/direct?q=London&limit=5&appid=2c36818bb5ca9e829313dd736fd15859")
    const data = await res.json();

    setChartData({
      series: [
        {
          name: 'Latitudes in London',
          data: data.map((d) => (d.lat))
        }
      ],
      xaxis: {
        categories: data.map((d) => (d.name))
      }
    });

  }

  fetchData()
});

function App() {

  return (
    <^> 
        <div class={styles.App}>
          <h2>Using ApexCharts.js to create charts in SolidJS</h2>
          <h3>Bar Chart</h3>
        </div>
    <^>
  );
}

export { chartData }

export default App;

Во-первых, вы импортируете styles для использования в разделе возврата.

Затем вы определяете возврат для функции App(), которая будет создавать заголовки для диаграммы при запуске приложения. Он вызывает styles для создания двух заголовков.

Сигналы из SolidJS можно экспортировать и использовать в любом другом компоненте, поэтому вы также экспортируете chartData ближе к концу файла.

Сохраните и закройте файл.

Поскольку сигнал экспортируется, теперь вы можете создать компонент диаграммы для его использования и отображения.

Шаг 3 — Создание диаграммы с данными из API

На этом этапе вы создадите компонент диаграммы и будете использовать данные из API для отображения диаграммы.

В папке src создайте папку components:

  1. mkdir src/components

Затем добавьте новый файл Charts.jsx:

  1. nano src/components/Charts.jsx

В новый файл Charts.jsx импортируйте SolidApexCharts и chartData:

import { SolidApexCharts } from 'solid-apexcharts';
import { chartData } from '../App';

Теперь добавьте следующие строки, чтобы создать функцию Charts:

function Charts() {

  return (
    <SolidApexCharts width="1200" type="bar" options={chartData()}  />
  );
};

export default Charts;

Функция Charts будет использовать информацию из переменной chartData, заданной ранее, для создания диаграммы bar размером 1200 пикселей. широкий. Вы передаете chartData в качестве значения options и устанавливаете ширину и тип диаграммы в компоненте SolidApexCharts.

Сохраните и закройте файл.

Откройте файл src/App.jsx:

  1. nano src/App.jsx

Теперь импортируйте компонент Charts в файл App.jsx:

import { createSignal, createEffect } from "solid-js";
import styles from './App.module.css';
import Charts from './components/Charts';

const [chartData, setChartData] = createSignal({});

function App() {

  return (
    <div class={styles.App}>
      <h2>Using ApexCharts.js to create charts in SolidJS</h2>
      <h3>Bar Chart</h3>
      <Charts />
    </div>
  );
};

export { chartData }

export default App;

Во-первых, вы импортируете Charts. Затем вы добавляете компонент чуть ниже элемента h3 для отображения при запуске приложения. В этой строке будет отображаться гистограмма с динамическими данными.

Сохраните и закройте файл.

Когда вы обновите свое приложение в браузере, появится гистограмма.

Вы также можете просмотреть файлы, созданные в этом руководстве, в репозитории сообщества DigitalOcean.

Заключение

В этой статье вы создали приложение SolidJS, которое извлекает данные из API для создания диаграмм. Вы использовали Apexcharts и Solid-ApexCharts для визуализации данных в приложении SolidJS. Теперь вы можете создавать другие типы диаграмм с динамическими данными. Попробуйте изменить диаграмму с гистограммы на другой тип диаграммы, поддерживаемый ApexCharts.

Чтобы узнать больше о SolidJS и его возможностях, посетите документацию ApexCharts.