react-chart-js-2 in combination with TypeScript for LineCharts: Uncaught Error: "point" is not a registered element

react-chart-js-2 in combination with TypeScript for LineCharts: Uncaught Error: "point" is not a registered element

我目前正在尝试通过 react-chartjs-2 构建折线图。为此,我使用了 TypeScript。我在实施时没有收到任何错误。 webiste 呈现正常,但是当我尝试打开呈现 LineChart 的组件时,我在浏览器中收到以下错误:

我的折线图组件如下所示:

import { Line } from "react-chartjs-2";
import {ChartData, ScatterDataPoint} from "chart.js"

type LineChartProps = {
    options: object,
    data: ChartData<"line", (number | ScatterDataPoint | null)[], unknown>,
}

export default function LineChart({options, data}:LineChartProps) {
  return ( 
    <Line data={data} options={options} />
  );
}

因为我希望能够处理来自不同来源的数据,所以我的处理程序看起来像这样(到目前为止非常基本):

import LineChart from "./LineChart";

const colors = ["#f7813e", "#547db4", "lightgreen", "lightcoral", "darkorchid"]

type LineChartHandlerProps = {
    labels: Array<string>,
    datasets:Array<Array<number>>,
    labelDatasets:Array<string>,
    title: string,
}


const LineChartHandler = ({labels, labelDatasets, datasets, title}:LineChartHandlerProps) => {
    const options = {
        plugins:{legend:{position: "bottom"}},
        layout:{padding:10},
        scales: {
          y:{
            ticks:{
              color:"#547db4",
              font:{
                size: 12
              }
            },
            grid:{
              color: "#547db4"
            }
          },
          x:{
            ticks:{
              color:"#547db4",
              font:{
                size: 12
              }
            }
          }
        },
      };       

    let data: { label: string; data: number[]; fill: boolean; borderColor: string; }[] = [];
    datasets.forEach((x,i) => {
        data.push(
          {
            label: labelDatasets[i],
            data: x,
            fill: true,
            borderColor: colors[i],
          }
        )
    })

    let dataFinal = {
        labels: labels,
        datasets: data,
    }

  return (
    <LineChart data={dataFinal} options={options} />
  )
}

export default LineChartHandler

由于折线图不需要选项我也尝试了但得到了同样的错误。我用这样的虚拟值调用我的处理程序:

              <LineChartHandler labels={["19", "20", "21", "22"]} labelDatasets={["u1", "u2"]} datasets={[[1, 3, 4, 6], [6, 8, 3.5, 5], [3.5, 5, 4, 2], [4, 2, 3, 3]]} title={"Test Line Chart"} />

似乎 chart.esm.js 中的“项目”未定义:

但我不知道为什么会这样。

感谢帮助!

这是因为 chart.js v3 是 treeshakable,因此您需要注册您正在使用的所有内容。在您的情况下,您没有注册 pointElement。你可以这样做:

import {Chart, PointElement} from 'chart.js';

Chart.register(PointElement);

您也可以选择只导入所有内容,这样您就不必像这样手动注册:

import 'chart.js/auto'