在 React 中使用 useState 和 @highcharts/react 构建动态图表

构建一个能够响应数据变化的图表是一项非常实用的技能。在这篇文章中,我将向你展示如何将 @highcharts/react 连接到 React 的状态(state),让图表自动更新------无需手动刷新,无需调用 chart.update(),只需让 React 做它最擅长的事情。

你将构建什么

一个当底层数据变化时即时更新的折线图。简洁、干净,这将是你未来构建所有真实仪表盘的基础。

前置要求

  • 已安装 Node.js(可用 node -v 检查)

  • React 基础知识

项目搭建

创建一个文件夹,然后使用 Vite 创建一个新的 React 项目:

bash 复制代码
npm create vite@latest . -- --template react

安装 Highcharts:

bash 复制代码
npm install @highcharts/react

启动开发服务器:

bash 复制代码
npm run dev
然后在浏览器中打开 http://localhost:5173。

你的第一个图表

打开 src/App.jsx,删除里面所有内容并替换为:

javascript 复制代码
import { Chart } from '@highcharts/react'
import { LineSeries } from '@highcharts/react/series/Line'

function App() {
  return (
    <Chart>
      <LineSeries data={[3, 4, 1, 5, 2]} />
    </Chart>
  )
}
export default App

保存文件。你应该能在浏览器中看到一个折线图。

添加 useState

静态数据是一个好的开始。但真实的仪表盘需要动态数据:筛选器、用户交互、API 响应......这时就需要 useState 登场了。

useState 为你的组件赋予了"记忆"能力。当数据变化时,React 会重新渲染组件,图表会自动反映新的数据。

更新 App.jsx

javascript 复制代码
import { useState } from 'react'
import { Chart } from '@highcharts/react'
import { LineSeries } from '@highcharts/react/series/Line'

function App() {
  const [data, setData] = useState([3, 4, 1, 5, 2])

  function updateData() {
    setData([5, 2, 8, 1, 6])
  }

  return (
    <>
      <button onClick={updateData}>更新图表</button>
      <Chart>
        <LineSeries data={data} />
      </Chart>
    </>
  )
}
export default App

点击按钮。图表会立即更新。

发生了什么

有三个值得理解的核心点:

1. useState 初始化数据

jsx

复制代码
const [data, setData] = useState([3, 4, 1, 5, 2])
  • data 保存当前的值

  • setData 负责更新它

  • 每次调用 setData,React 都会重新渲染组件

2. 图表通过 prop 接收数据

jsx

复制代码
<LineSeries data={data} />

data 只是一个普通的 prop。当它变化时,@highcharts/react 会在内部自动处理更新------无需任何手动干预

3. 不要手动调用 chart.update()

如果你之前用过 Highcharts,可能会想到 chart.update()。这个方法仍然存在,但它会在每次状态变化时自动幕后调用。这个集成层足够智能,能在正确的时机、用正确的配置调用它。

你绝对不应该做的是 :手动调用 chart.update()

如果你这样做了,React 状态和图表内部状态会失去同步 ------两个数据源,哪个都不靠谱。让集成层来处理吧:你只需要更新状态,@highcharts/react 会搞定剩下的一切。

为什么这很重要

这个模式是以下所有功能的幕后逻辑:

  • 仪表盘筛选器

  • 日期范围选择器

  • 数据刷新按钮

图表不是你组件树中的特例------它只是另一个响应状态变化的普通 React 组件,和其他所有组件一样。

在下一篇文章中,我们将使用 useEffect 从 API 获取真实数据,并通过相同的模式将其传递给图表。

英文原文链接:https://www.highcharts.com/blog/post/dynamic-charts-in-react-using-usestate-with-highcharts-react/

相关推荐
子兮曰2 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰2 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
前端小万2 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝2 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋2 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
伞伞悦读2 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
卡布鲁2 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
C语言小火车2 天前
C/C++ 为什么需要编译器?
开发语言·c++
李少兄2 天前
JavaScript 隐式全局变量解析
javascript