首次开发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
相关产品推荐
相关产品推荐

