react-chartjs-2 v5.0.1组件失效致应用崩溃求助
搞定react-chartjs-2 v5.0.1里"category"未注册的崩溃问题
为啥会报这个错?
react-chartjs-2从v5版本开始,不再自带chart.js核心库,也不会自动注册图表需要的缩放器、元素这些组件。你看到的"category" is not a registered scale报错,就是因为Line图表默认要用的category缩放器没注册,直接导致页面崩了。
至于课程讲师不用装chart.js就能跑,大概率是他用的是v4或者更早的版本——那些旧版本会自动把chart.js打包进去,还会帮你注册好必要的组件。
怎么搞定?
1. 先装chart.js依赖
v5必须手动装chart.js,而且得是v3版本(别装v4,容易不兼容):
npm install chart.js@^3.0.0 # 用yarn的话就跑这个 yarn add chart.js@^3.0.0
2. 在代码里注册需要的组件
打开你的dashboard.jsx,导入Chart.js的核心和图表需要的组件,然后注册它们。Line和Doughnut需要的组件不一样,直接抄下面的代码改就行:
import React, { useEffect } from "react"; import Sidebar from "./Sidebar.js"; import "./dashboard.css"; import { Typography } from "@material-ui/core"; import { Link } from "react-router-dom"; import { Doughnut, Line } from "react-chartjs-2"; // 新增:导入Chart.js的核心和所需组件 import { Chart as ChartJS, CategoryScale, LinearScale, PointElement, LineElement, Tooltip, Legend, ArcElement } from 'chart.js'; import { useSelector, useDispatch } from "react-redux"; import MetaData from "../../more/MetaData"; import Loading from "../../more/Loading"; import { getAdminProduct } from "../../actions/ProductActions.js"; import { getAllOrders } from "../../actions/OrderAction.js"; import { getAllUsers } from "../../actions/userActions.js"; // 新增:注册所有需要的组件 ChartJS.register( CategoryScale, LinearScale, PointElement, LineElement, Tooltip, Legend, ArcElement );
3. 可选:给图表加明确配置(防后续报错)
你的lineState和doughnutState配置本身没问题,但如果之后还有奇怪报错,可以给Line图表明确指定x轴类型,比如:
const lineState = { labels: ["Initial Amount", "Amount Earned"], datasets: [ { label: "TOTAL AMOUNT", backgroundColor: ["#3BB77E"], hoverBackgroundColor: ["#3BB77E"], data: [0, totalAmount], }, ], options: { scales: { x: { type: 'category', // 明确告诉它x轴用category缩放器 } } } };
补充说明
v5这么改是为了让你按需引入组件,减小打包后的文件大小,不再强制把所有Chart.js的东西都塞进去。所以别嫌麻烦,必须手动注册你用到的组件才行。
内容的提问来源于stack exchange,提问作者MegaMindTheCoder
相关产品推荐
相关产品推荐

