使用 Chart.js 在 React 中进行数据可视化
创建交互式且视觉上有吸引力的图表是开发现代 Web 应用程序的开发人员的一项基本技能。**Chart.js** 是一个流行的数据可视化 JavaScript 库,它提供了一种简单而强大的方法来创建各种类型的图表,例如条形图、折线图、饼图等。当与 React(一种广泛用于构建用户界面的 JavaScript 库)结合使用时,它成为制作动态和响应式可视化的有效工具。在本文中,我们将探讨如何将 Chart.js 集成到 React 项目中并逐步创建令人惊叹的图表。
安装依赖项
npm create vite@latest
在终端提示符下输入**项目名称**,然后选择**react**,并根据自己的喜好调整是否使用**javascript**或typescript**。
npm i chart.js react-chartjs-2
**react-chartjs-2** 库充当 Chart.js 库的 React 包装器。它通过为各种类型的图表(例如 Line、Bar、Pie)提供预构建的 React 组件,简化了将 Chart.js 集成到 React 应用程序的过程。
文件夹结构

删除不需要的文件和文件夹并创建一个组件文件夹。
创建图表组件
在组件文件夹中,创建一个文件来创建图表。

条形图
偷懒的方法
import 'chart.js/auto'; import { Chart } from 'react-chartjs-2';
可摇树的方式
import { Chart } from 'react-chartjs-2'; import { Chart as ChartJS, CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend, } from 'chart.js'; ChartJS.register( CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend );
将 Chart.js 与 React 集成的两种方法(Lazy 方式和 Tree-shakable 方式)都有各自的优点和权衡。
Lazy 方式使用 import 'chart.js/auto',实现起来快速而简单。它会自动注册所有必要的 Chart.js 组件,是小型项目或快速原型的绝佳选择。但是,这种方法可能会导致包大小变大,因为它会导入并注册所有 Chart.js 组件,甚至包括您可能不会在应用程序中使用的组件。

另一方面,Tree-shakable 方式通过允许您仅导入和注册所需的 Chart.js 组件来提供更好的优化。这可以减小包大小,从而提高应用程序性能,尤其是在较大或生产级项目中。但是,它需要更多设置和手动管理已注册的组件,这对于初学者或简单用例来说可能更复杂或繁琐。

总而言之,Lazy 方式对于开发的简单性和速度来说是理想的选择,而 Tree-shakable 方式则是性能和捆绑包大小至关重要的生产环境的首选。
但在本文中,为了简单起见,我们将使用懒惰的方法。
import 'chart.js/auto'; import { Chart } from 'react-chartjs-2'; export default function BarChart() { const options = { responsive: true, plugins: { title: { display: true, text: 'Steps taken per day', }, }, }; const data = { labels: [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', ], datasets: [ { label: 'John', data: [10200, 8212, 9435, 10032, 8756, 10324, 9021], backgroundColor: '#ef4444', }, { label: 'Jane', data: [8010, 9432, 9401, 8790, 10431, 9110, 8833], backgroundColor: '#3b82f6', }, ], }; return (); }
react-chartjs-2 中的 Chart 组件需要三个主要属性:type、data 和 options。
`type`:指定要呈现的图表类型,例如条形图、折线图、饼图等。这决定了图表的整体外观和结构。
`data`:包含定义图表显示内容的标签和数据集。例如,在条形图中,数据包括 x 轴上的类别和每个数据集的值。
`options`:配置图表的其他设置,例如响应性、插件(例如标题和工具提示)和布局调整。此属性允许您自定义图表的行为和外观。
这三个属性协同工作,在 React 中创建一个功能齐全且可交互的图表。

甜甜圈图
import 'chart.js/auto'; import { Chart } from 'react-chartjs-2'; export default function DoughnutChart() { const options = { responsive: true, plugins: { title: { display: true, text: 'Gender of students in a class', }, }, }; const data = { labels: ['Man', 'Woman', 'Other'], datasets: [ { label: 'Total', data: [45, 50, 5], backgroundColor: ['#ef4444', '#3b82f6', '#22c55e'], }, ], }; return (); }
折线图
import 'chart.js/auto'; import { Chart } from 'react-chartjs-2'; export default function LineChart() { const options = { responsive: true, plugins: { title: { display: true, text: 'Steps taken per day', }, }, }; const data = { labels: [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', ], datasets: [ { label: 'John', data: [10200, 8212, 9435, 10032, 8756, 10324, 9021], fill: true, backgroundColor: '#ef444450', borderColor: '#ef4444', tension: 0.5, }, { label: 'Jane', data: [8010, 9432, 9401, 8790, 10431, 9110, 8833], fill: true, backgroundColor: '#3b82f650', borderColor: '#3b82f6', tension: 0.5, }, ], }; return (); }
饼图
import 'chart.js/auto'; import { Chart } from 'react-chartjs-2'; export default function PieChart() { const options = { responsive: true, plugins: { title: { display: true, text: 'Gender of students in a class', }, }, }; const data = { labels: ['Man', 'Woman', 'Other'], datasets: [ { label: 'Total', data: [45, 50, 5], backgroundColor: ['#ef4444', '#3b82f6', '#22c55e'], }, ], }; return (); }

重构
您还可以将数据移动到新文件中并使用映射显示数据。
//data.ts export const stepsData = [ { name: 'John', steps: [ { day: 'Sunday', value: 10200, }, { day: 'Monday', value: 8212, }, { day: 'Tuesday', value: 9435, }, { day: 'Wednesday', value: 10032, }, { day: 'Thursday', value: 8756, }, { day: 'Friday', value: 10324, }, { day: 'Saturday', value: 9021, }, ], }, { name: 'Jane', steps: [ { day: 'Sunday', value: 8010, }, { day: 'Monday', value: 9432, }, { day: 'Tuesday', value: 9401, }, { day: 'Wednesday', value: 8790, }, { day: 'Thursday', value: 10431, }, { day: 'Friday', value: 9110, }, { day: 'Saturday', value: 8833, }, ], }, ];
import 'chart.js/auto'; import { Chart } from 'react-chartjs-2'; import { stepsData } from '../utils/data'; export default function LineChart() { const options = { responsive: true, plugins: { title: { display: true, text: 'Steps taken per day', }, }, }; const labels = stepsData[0]?.steps.map((step) => step.day); const datasets = stepsData.map((person) => ({ label: person.name, data: person.steps.map((step) => step.value), fill: true, tension: 0.5, })); const data = { labels, datasets, }; return (); }
结论
在本文中,我们探讨了如何将 Chart.js 与 React 集成以创建视觉上引人入胜且具有交互性的图表,包括条形图、圆环图、折线图和饼图。我希望本指南能帮助您开始使用 React 进行数据可视化。如需进一步探索并访问完整代码,请随时查看以下链接中的项目存储库。