ChartJS+React:在散布视图中切换showLine不起作用

g52tjvyc  于 2022-11-06  发布在  Chart.js
关注(0)|答案(1)|浏览(136)

我有一个简单的散点图使用ChartJS与React。散点图通常有能力连接线之间的单一数据点设置选项'showLine'在数据集中。我想有一个按钮来切换这个选项(打开/关闭showLines)。不幸的是,这不工作。
如果showLines在initalDataSet中为true,则将其更改为false不会执行任何操作。如果showLines在initalDataSet中为false,则将其更改为true会导致ChartJS崩溃,并显示以下错误:

Uncaught TypeError: line is null

这是所描述问题的一个简单示例:

import React, {
  useEffect,
  useReducer,
} from "react";
import { Scatter } from "react-chartjs-2";
import Chart from "chart.js/auto";

const initalDataSet = {
  datasets: [
    {
      label: "dataset1",
      data: [
        {
          x: 1,
          y: 10,
        },
        {
          x: 3,
          y: 15,
        },
        {
          x: 5,
          y: 5,
        },
        {
          x: 7,
          y: 8,
        },
      ],
      borderColor: "red",
      showLine: false,
    },
    {
      label: "dataset2",
      data: [
        {
          x: 2,
          y: 4,
        },
        {
          x: 4,
          y: 6,
        },
        {
          x: 6,
          y: 12,
        },
        {
          x: 8,
          y: 18,
        },
        {
          x: 10,
          y: 10,
        },
        {
          x: 12,
          y: 15,
        },
        {
          x: 14,
          y: 5,
        },
        {
          x: 16,
          y: 8,
        },
      ],
      borderColor: "blue",
      showLine: false,
    },
  ],
};

const processData = (state, action) => {
  switch (action.type) {
    case "TOGGLE_LINE":
      return {
        ['datasets']: state.datasets.map((item) => ({
          ...item,
          showLine: (!item['showLine']),
        })),
      };
    default:
      return state;
  }
};

function App() {
  const [plotData, dispatch] = useReducer(processData, initalDataSet);

  useEffect(() => {
    console.log("debug --->", { datasets: Object.values(plotData) });
  }, [plotData]);

  return (
    <div className="App">
      <header className="App-header">
        <button
          onClick={() => {
            dispatch({ type: "TOGGLE_LINE" });
          }}
        >
          Toggle Line View
        </button>
        <Scatter data={plotData} />
      </header>
    </div>
  );
}

export default App;

我想一定是ChartJS组件的重新呈现问题,但是我不知道怎么解决,有人知道怎么解决吗?
谢谢你!

zfycwa2u

zfycwa2u1#

可以在here中找到此错误的可能解决方案/变通方法。

相关问题