You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

首次开发React图表遭遇chart.tsx:70 Uncaught TypeError错误,请求排查解决

解决图表报错:Uncaught TypeError: Cannot read properties of undefined (reading 'labels')

嘿,我帮你看了下代码,这个错误的根源其实挺清晰的,咱们一步步来排查:

最直接的问题:拼写错误!

你给Doughnut组件传的属性是date={chartData},但react-chartjs-2的图表组件需要的数据源属性是data,不是date!就因为这个拼写失误,组件根本拿不到正确的数据,自然会尝试读取undefined的labels属性,直接抛出错误。

第二个潜在问题:数据未初始化

如果你的useTransactions钩子是异步获取数据(比如从后端接口、本地存储加载),那组件初始渲染时chartData大概率是undefined——就算你把date改成data,这时候还是会触发同样的错误。所以得加个兜底处理。

具体修复步骤:

1. 修正组件属性名

把Doughnut的date改成data,这是最紧急的修复:

<Doughnut data={chartData} />

2. 给chartData加兜底判断

你可以选择在数据加载完成前显示加载状态,或者给一个默认的空数据结构,避免组件读取undefined:

// 方案一:显示加载状态
if (!chartData) {
  return (
    <Card className={title === 'Income' ? classes.income : classes.expense}>
      <CardHeader title={title} />
      <CardContent>
        <Typography>Loading chart...</Typography>
      </CardContent>
    </Card>
  );
}

// 方案二:提供默认空数据(避免页面闪烁)
const safeChartData = chartData || {
  labels: [],
  datasets: [{ data: [] }]
};

// 然后使用safeChartData
<Doughnut data={safeChartData} />

3. 检查useTransactions钩子的返回值

最后确认一下useTransactions(title)是否真的返回了符合要求的chartData。react-chartjs-2要求data必须包含labels数组和datasets数组,比如正确的结构应该是:

{
  labels: ['餐饮', '交通', '购物'],
  datasets: [{
    data: [300, 150, 200],
    backgroundColor: ['#FF6384', '#36A2EB', '#FFCE56']
  }]
}

如果这个钩子内部逻辑出错,导致chartData没有生成正确的结构,也会触发同样的错误,得去检查钩子的实现。

至于你怀疑的ForwardRef,从当前的组件代码来看,并没有直接关联这个错误,不用太担心这个方向~

内容的提问来源于stack exchange,提问作者M Shushant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 23:57:32