You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中使用chart.js与react-chartjs-2绘制折线图报错求助

问题:温湿度亮度折线图绘制报错解决

依赖配置

"dependencies": {
    "antd": "^5.13.2",
    "chart.js": "^3.9.1",
    "react": "^18.2.0",
    "react-chartjs-2": "^4.3.1",
    "react-dom": "^18.2.0",
  },

代码实现

import React from 'react'
import { Line } from 'react-chartjs-2';

const GraphElement = () => {

  const chartData = {
    labels: timeData,
    datasets: [
      {
        label: 'Temperature',
        data: temperatureData,
        fill: false,
        borderColor: 'rgb(255, 99, 132)',
        tension: 0.1,
      },
      {
        label: 'Humidity',
        data: humidityData,
        fill: false,
        borderColor: 'rgb(75, 192, 192)',
        tension: 0.1,
      },
      {
        label: 'Brightness',
        data: brightnessData,
        fill: false,
        borderColor: 'rgb(255, 206, 86)',
        tension: 0.1,
      },
    ],
  }

  const options = {
    scales: {
      x: {
        type: 'linear',
        position: 'bottom',
      },
      y: {
          beginAtZero: true,
          max: 1000,
          type: 'linear',
      },
    },
  };


  return (
    <div className='graph--container'>
      ĐỒ THỊ 
      <Line key={chartKey} data={chartData} options={options} />
    </div>
  )
}

export default GraphElement;

报错信息

ERROR
"linear" is not a registered scale.

and
Canvas is already in use. Chart with ID '0' must be destroyed before the canvas with ID '' can be reused.

已尝试操作

  • 降级chart.js和react-chartjs-2版本,问题未解决

解决方案

1. 修复"linear"未注册比例尺错误

Chart.js v3+版本需要手动注册所需组件,包括线性比例尺。修改代码导入部分,注册必要组件:

import React from 'react'
import { Line } from 'react-chartjs-2';
import { Chart, registerables } from 'chart.js';

// 一次性注册所有Chart.js核心组件
Chart.register(...registerables);

如果想按需注册,也可以单独导入需要的组件:

import { Chart, LinearScale, CategoryScale, LineElement, PointElement, Tooltip, Legend } from 'chart.js';

Chart.register(LinearScale, CategoryScale, LineElement, PointElement, Tooltip, Legend);

注:如果timeData是时间序列数据,建议改用TimeScale并注册,同时调整x轴配置为type: 'time'

2. 修复Canvas重复使用错误

这个问题是因为Chart实例未被正确销毁,导致canvas被重复占用,可通过两种方式解决:

方式一:确保chartKey有效且动态更新

代码中使用了chartKey但未定义,需将其绑定到数据变化上,强制组件重新渲染:

// 假设timeData是组件内的状态变量
const [timeData, setTimeData] = React.useState([]);
// 用数据长度或时间戳作为唯一key
const chartKey = timeData.length;

方式二:手动销毁Chart实例

通过ref获取Chart实例,在组件卸载时销毁:

import React, { useRef, useEffect } from 'react'
import { Line } from 'react-chartjs-2';
import { Chart, registerables } from 'chart.js';

Chart.register(...registerables);

const GraphElement = () => {
  const chartRef = useRef(null);

  useEffect(() => {
    const chartInstance = chartRef.current?.chartInstance;
    // 组件卸载时销毁实例
    return () => chartInstance?.destroy();
  }, []);

  // ...其余代码不变

  return (
    <div className='graph--container'>
      ĐỒ THỊ 
      <Line ref={chartRef} key={chartKey} data={chartData} options={options} />
    </div>
  )
}

export default GraphElement;

额外检查点

  • 确认timeData、temperatureData等变量已在组件内正确定义或传入,避免未定义错误
  • 若x轴为时间数据,需调整x轴配置为时间比例尺,并确保数据格式符合Chart.js的时间要求

内容的提问来源于stack exchange,提问作者TunazZz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 11:57:30