ChartJS 〈画布已在使用中,必须先销毁ID为'18'的图表,然后才能在react中重新使用>画布

os8fio9y  于 2022-11-07  发布在  Chart.js
关注(0)|答案(1)|浏览(192)

已经实现了几个图表,我们希望在每次按下按钮时动态输出一个新图表。但是,它说无法绘制图表,因为当前存在一个具有特定ID的图表。我如何解决这些错误?有没有办法在不破坏已实现图表的情况下修复错误?下面是我的代码。

const main = () =>
{
  const [count, setCount] = useState([])
  const addWidget = () =>
  {
    setCount([...count, data])
  }
  const data= 
  {
    labels: ['1', '2', '3', '4', '5', '6', '7' , '8', '9','10'],
    datasets: [
      {
        type: 'line',
        label: 'Dataset 1',
        borderColor: 'rgb(54, 162, 235)',
        borderWidth: 2,
        data: [30, 9, 24, 50,-20,20, 17, 45, 49],
      }
   ],
  }
  return (
    <div>
      // chart test code
      <Chart data = {Line_data1} options={options} style={{ position: "relative"}}/> 
      <Chart data = {Bar_data} options={Bar_mutilLabel_options} style={{ position: "relative"}}/> 
      {count.map(el => <><div><Chart style={{width:'10%'}}  options={options} data={el}/></div></>)}
      <button onClick={addWidget}>
        Click me
      </button>
    </div>
  )
}
iyr7buue

iyr7buue1#

看看react-chartjs-2' issues中的这个线程。特别是MartinP-C的评论。
我收到了这个错误(在React 18.0.1中,在严格模式下再次出现),删除严格模式可以停止错误(因为在开发模式下,严格模式会两次调用生命周期函数?因此可以重用画布?https://reactjs.org/docs/strict-mode.html#detecting-unexpected-side-effects)
然而!Strict Mode本身并不是问题所在。我没有注册Chart.JS组件,而抛出的错误(“”arc”不是已注册的元素“)一定是导致React两次调用并尝试重用画布。
修复注册的元素错误也停止了“Canvas already in use”错误。(注册组件:https://react-chartjs-2.js.org/docs/migration-to-v4#tree-shaking)

相关问题