作者选择MOZILLA Foundation]接受捐赠,作为WRITE FOR ADENTIONS计划)的一部分。
简介
可视化数据为用户提供了一种直观的方式来了解他们的Web应用程序系统中正在发生的事情。ApexCharts是一个可用于通过SolidJS.)创建图表的包
SolidJS是一个用于构建用户界面的JavaScript库。由于SolidJS基于与React和Svelte,)等JAVASCRIPT库相同的设计,因此具有这些库经验的开发人员可以快速适应SolidJS。SolidJS立即将其模板编译为DOM,,在内部使用反应式编程而不是虚拟DOM更新DOM。SolidJS中的组件是常规的JavaScript函数,因此它们只呈现一次。SolidJS提供了当代的框架特性,包括并行渲染、JSX、片段、上下文、门户、悬念、流SSR和渐进式水合。Vite是主要的构建工具,它将您的应用程序打包为JAVASCRIPT以使其紧凑。
ApexCharts是一个开源的、可定制的JAVASCRIPT图表库,用于创建Web应用的交互可视化。您可以将ApexCharts与许多流行的JavaScript框架集成在一起,包括SolidJS。ApexCharts有一系列灵活且响应迅速的图表,可以跨多个屏幕呈现。
在本教程中,您将把ApexCharts集成到SolidJS应用程序中以实现数据可视化。您将开发一个应用程序,从OpenWeatherMap API中提取天气数据并将其显示在条形图中。
前提条件
要学习本教程,您需要具备以下条件:
- 您的机器上安装了Node.js,您可以按照如何安装Node.js.》中的教程进行设置
- Firefox或Chrome.)等网络浏览器
- (可选)SolidJS库的基本知识。您可以查看SolidJS文档.
- (可选)支持JAVASCRIPT语法高亮显示的文本编辑器,如Visual Studio Code或Atom.本教程使用命令行编辑器
nan
。
第一步-创建SolidJS项目
在本步骤中,您将创建一个SolidJS项目并安装创建图表所需的所有依赖项。您将使用包含所需样板代码的Vite Template]创建一个SolidJS应用程序。
在新的终端会话中,创建并移动到本教程将使用的新目录:
1mkdir charts
2cd charts
在本教程中,该目录将命名为charts
,但您可以随意命名。
然后,运行npx degit
命令,将模板从仓库solid/js/templates/js
克隆到您的项目文件夹中:
1npx degit solidjs/templates/js solid-chart
您可以将Solid-chart
替换为您的应用程序的所需名称。
<$>[备注] 注意: TypeScrip是JavaScript的超集,提供可选的静态类型、类和接口。它还为JSX提供了增强的代码完成和智能感知。如果您喜欢使用TypeScrip,请运行以下命令:
1npx degit solidjs/templates/ts solid-chart
您将收到与/js
模板相同的/ts
模板输出。
<$>
您将收到以下输出:
1[secondary_label Output]
2> cloned solidjs/templates#HEAD to solid-chart
此输出确认模板已保存到您的计算机。将模板克隆到项目文件夹后,可以移到模板文件夹并安装项目的必要依赖项:
1cd solid-chart
2npm install
NPM将为该项目安装必要的依赖项。
在SolidJS中集成图表还需要两个依赖项:ApexCharts和Solid-ApexCharts.
ApexCharts是一个JavaScript图表库,用于为Web应用程序创建交互式可视化。ApexCharts支持14种图表,包括条形图、折线图、面积图、饼图、柱形图、方框图、烛台图、热图等。
Solid-ApexCharts是ApexCharts的SolidJS包装器,使您能够将ApexCharts元素用作SolidJS组件。
运行此命令以安装以下依赖项:
1npm install apexcharts solid-apexcharts
然后,使用以下命令启动开发服务器:
1npm run dev
您将收到类似以下内容的输出:
1[secondary_label Output]
2...
3 vite v2.9.15 dev server running at:
4
5 > Local: http://localhost:3000/
6 > Network: use `--host` to expose
7
8 ready in 605ms.
您的应用程序现在将在端口'3000'上运行。打开浏览器,输入URL http://localhost:3000/
,进入SolidJS启动页面:
<$>[注] 注意: 如果您是在远程服务器上学习教程,您可以使用端口转发在浏览器中测试应用。
在开发服务器仍在运行的情况下,在本地计算机上打开另一个终端并输入以下命令:
1ssh -L 3000:localhost:3000 your_non_root_user@your_server_ip
连接到服务器后,在本地计算机的Web浏览器上导航到http://localhost:3000
。在本教程的其余部分中,保持第二个端子处于打开状态。
<$>
一旦安装了所有依赖项,就可以从API获取数据。
第二步-从API取数
在本步骤中,您将使用Fetch API从OpenWeatherMap.检索数据您将使用特定位置的纬度,并在图表中显示变化。
在您的首选编辑器中,打开src
文件夹中的App.jsx
文件。本教程使用命令行编辑器nan
:
1nano src/App.jsx
<$>[备注]
注意: 如果您在第一步中使用的是类型脚本模板,则不会使用.jsx
文件。相反,在整个教程中打开任何.jsx
文件的.tsx
文件。
<$>
在这里,您将从API检索数据并将其提供给另一个组件,以便它可以呈现图表。
首先,删除模板文件中自动生成的所有信息。
接下来,添加一行,从solid-js
导入createEffect
:
1[label src/App.jsx]
2import { createEffect } from "solid-js";
现在,您将在函数调用API的位置创建效果。将以下行添加到文件中:
1[label src/App.jsx]
2...
3
4createEffect(() => {
5 const fetchData = async () => {
6 const res = await fetch("http://api.openweathermap.org/geo/1.0/direct?q=London&limit=5&appid=2c36818bb5ca9e829313dd736fd15859");
7 const data = await res.json();
8 };
9
10 fetchData()
11});
一个名为fetchData
的异步函数使用Fetch接口查询OpenWeatherMap接口。此函数在App
组件挂载后立即运行,因为fetchData
在createEffect
中被调用。OpenWeatherMap API通常返回一组天气对象。在这里,使用的是5‘的限制。从数据来看,只有
name和
lat是要使用的实体(在API调用中,查询是
London,API key是
appid=`标识的字符串)。
因为fetchData
是一个fetchc函数,所以你需要await
响应。响应在可用时存储在res
变量中。一旦服务器接收到数据,响应将使用函数.json()
转换为JSON
并存储在data
变量中。
检索数据后,下一项任务是将其存储在信号中并将其导出。 从API检索数据后,您可以创建图表数据信号并使用空对象对其进行初始化。然后用API中的数据更新它的值。
仍然在src/App.jsx
中,从solid-js
导入sendSignal
。为此,请通过添加突出显示的文本来更新初始导入:
1[label src/App.jsx]
2import { createSignal, createEffect } from "solid-js";
3...
然后,在IMPORT语句后面添加突出显示的文本,为图表数据创建一个Signal
变量:
1[label App.jsx]
2import { createSignal, createEffect } from 'solid-js';
3
4const [chartData, setChartData] = createSignal({});
5...
在‘固体’中,‘信号’是反应性的基础。它们包含动态值,因此如果修改Signal
的值,依赖它的所有内容都会自动更新。
初始值是用来创建Signal
的参数,有两个函数的数组(a_Getter_和_setter_)是返回值。第一个返回值不是值本身,而是一个getter,一个返回当前值的函数。为了进行适当的更新,库需要跟踪该信号被读取的位置。在本教程中,chartData
是getter,而setChartData
是setter。Signal
是用空对象初始化的。
ApexCharts要求您指定选项。在本教程中,您将指定带有)选项,以及添加)选项。
为此,您将使用map()
方法构建从API返回的值数组。map()
方法为每个数组元素调用一个函数,在新数组中返回结果。在fetchData
异步函数中添加突出显示的行:
1[label App.jsx]
2...
3createEffect(() => {
4 const fetchData = async () => {
5 const res = await fetch("http://api.openweathermap.org/geo/1.0/direct?q=London&limit=5&appid=2c36818bb5ca9e829313dd736fd15859");
6 const data = await res.json();
7
8 setChartData({
9 series: [
10 {
11 name: 'Latitudes in London',
12 data: data.map((d) => (d.lat))
13 }
14 ],
15 xaxis: {
16 categories: data.map((d) => (d.name))
17 }
18 });
19 };
20
21 fetchData()
22});
在setter函数setChartData
中,您可以为Apexcharts
的series
和xaxis
指定值。
在)遍历从服务器返回的
data,并传递由
lat`表示的纬度值。这些将是每个图表中的值。
xaxis
对象需要categories
属性,该属性通过使用map()
方法迭代data
并传递name
的值来设置。此值表示每个图表上的城市名称。
使用API中的图表参数和数据更新chartData
后,需要提供样式并导出。将突出显示的行添加到文件中:
1[label App.jsx]
2import { createSignal, createEffect } from "solid-js";
3import styles from './App.module.css';
4
5const [chartData, setChartData] = createSignal({});
6
7createEffect(() => {
8 const fetchData = async () => {
9 const res = await fetch("http://api.openweathermap.org/geo/1.0/direct?q=London&limit=5&appid=2c36818bb5ca9e829313dd736fd15859")
10 const data = await res.json();
11
12 setChartData({
13 series: [
14 {
15 name: 'Latitudes in London',
16 data: data.map((d) => (d.lat))
17 }
18 ],
19 xaxis: {
20 categories: data.map((d) => (d.name))
21 }
22 });
23
24 }
25
26 fetchData()
27});
28
29function App() {
30
31 return (
32
33 <div class={styles.App}>
34 <h2>Using ApexCharts.js to create charts in SolidJS</h2>
35 <h3>Bar Chart</h3>
36 </div>
37
38 );
39}
40
41export { chartData }
42
43export default App;
首先,导入style
以在Return部分使用。
然后,定义函数App()
的返回,该函数将在您运行应用程序时为图表创建标题。它调用style
来创建两个Header。
来自SolidJS的信号可以被任何其他组件导出和使用,因此您还可以在文件末尾导出chartData
。
保存并关闭该文件。
由于信号已导出,您现在可以创建一个图表组件来使用和显示它。
第三步-使用接口数据创建图表
在此阶段,您将创建一个图表组件并使用API中的数据来显示图表。
在src
文件夹中,创建一个Components
文件夹:
1mkdir src/components
然后添加新的Charts.jsx
文件:
1nano src/components/Charts.jsx
在新的Charts.jsx
文件中,导入SolidApexCharts
和chartData
:
1[label src/components/Charts.jsx]
2import { SolidApexCharts } from 'solid-apexcharts';
3import { chartData } from '../App';
现在添加以下行以创建一个Charts
函数:
1[label src/components/Charts.jsx]
2function Charts() {
3
4 return (
5 <SolidApexCharts width="1200" type="bar" options={chartData()} />
6 );
7};
8
9export default Charts;
Charts
函数将使用前面设置的chartData
变量中的信息来创建一个1200
像素宽的bar
图表。传入chartData
作为options
的值,并在SolidApexCharts
组件中设置图表的宽度和类型。
保存并关闭该文件。
打开src/App.jsx
文件:
1nano src/App.jsx
现在将Charts
组件导入到App.jsx
文件中:
1[label App.jsx]
2import { createSignal, createEffect } from "solid-js";
3import styles from './App.module.css';
4import Charts from './components/Charts';
5
6const [chartData, setChartData] = createSignal({});
7
8function App() {
9
10 return (
11 <div class={styles.App}>
12 <h2>Using ApexCharts.js to create charts in SolidJS</h2>
13 <h3>Bar Chart</h3>
14 <Charts />
15 </div>
16 );
17};
18
19export { chartData }
20
21export default App;
首先,您导入Charts
。然后,将<Charts/>
组件添加到h3
元素的正下方,以在应用程序运行时呈现。这条线将显示带有动态数据的条形图。
保存并关闭该文件。
当您在浏览器中刷新应用程序时,条形图将呈现。
您还可以在DigitalOcean社区repository.]中查看本教程中创建的文件
结论
在本文中,您构建了一个从API获取数据以创建图表的SolidJS应用程序。您在SolidJS应用程序中使用了ApexChart和Solid-ApexCharts进行数据可视化。现在,您可以使用动态数据制作其他类型的图表。尝试将图表从条形图调整为ApexCharts支持的另一种图表类型。
要了解有关SolidJS及其功能的更多信息,请访问SolidJS文档。要了解有关ApexCharts和其他可用配置的更多信息,请查看ApexCharts文档。