NextJS 中的 ChartJS 抛出错误 TypeError: 无法读取 null 的属性(读取 'useRef')



所以我正在尝试使用ChartJS为我的NextJS应用程序添加图形。然而,我似乎在渲染它时遇到了问题。我也遵循了其他教程和/或文章,但似乎也遇到了同样的错误。

我得到的错误是:

Server Error
TypeError: Cannot read properties of null (reading 'useRef')
This error happened while generating the page. Any console logs will be displayed in the terminal window.

我不知道为什么会出现这个错误,因为我的代码中没有使用useRef挂钩。

这是我的root/pages/admin/home.js代码

import Head from 'next/head'
import Image from 'next/image'
import LineGraph from '../../components/admin/line'
export default function Home() {
return (
<div className="container">
<Head>
<title>Create Next App</title>
<link rel="icon" href="/favicon.ico" />
</Head>
<main>
<LineGraph />
</main>
</div>
)
}

这是我的LineGraphroot/components/admin/line.js代码

import React, { useRef } from 'react';
import { Line } from 'react-chartjs-2';
import Chart from 'chart.js/auto';
const data = {
labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
datasets: [
{
label: 'My First dataset',
fill: false,
lineTension: 0.1,
backgroundColor: 'rgba(75,192,192,0.4)',
borderColor: 'rgba(75,192,192,1)',
borderCapStyle: 'butt',
borderDash: [],
borderDashOffset: 0.0,
borderJoinStyle: 'miter',
pointBorderColor: 'rgba(75,192,192,1)',
pointBackgroundColor: '#fff',
pointBorderWidth: 1,
pointHoverRadius: 5,
pointHoverBackgroundColor: 'rgba(75,192,192,1)',
pointHoverBorderColor: 'rgba(220,220,220,1)',
pointHoverBorderWidth: 2,
pointRadius: 1,
pointHitRadius: 10,
data: [65, 59, 80, 81, 56, 55, 40]
}
]
};
const LineGraph = () => {
return (
<canvas>
<h2>Line Example</h2>
<Line
id="lineChart"
data={data}
width={400}
height={400}
/>
</canvas>
);
}
export default LineGraph;

附言:如果这个问题重复,请删除链接,我会试试的。非常感谢你们的帮助。

所以,我想明白了。这与软件包版本有关。在我的package.json文件中,我有以下依赖项:

"dependencies": {
"next": "12.3.1",
"react": "18.2.0",
"react-dom": "18.2.0",
"chart.js": "^2.9.3",
"react-chartjs-2": "^2.9.0"
}

为了使其工作,我不得不手动安装具有特定版本的chart.jsreact-chartjs-2。所以,我的图终于工作了,我的package.json看起来像这样:

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

首先,由于您没有使用useRef,因此可以删除导入。

您的代码可能会失败,因为您将HTML放在canvas元素中,而这不是您应该做的事情

React chartjs会自动为您创建画布标签。因此,您应该将画布标签更改为div,甚至更干净的片段

const LineGraph = () => {
return (
<>
<h2>Line Example</h2>
<Line
id="lineChart"
data={data}
width={400}
height={400}
/>
</>
);
}

相关内容

  • 没有找到相关文章

最新更新