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

如何解决Cannot read properties of undefined读取Fiscal Year报错

问题原因

你仅对最外层的stats变量做了非空判断,没有校验嵌套属性路径上每一层的存在性:API请求是异步流程,组件首次渲染时stats可能已经被初始化为非空值(比如空对象{}),但此时stats['Financial Highlights']的值还是undefined,直接读取它的子属性Fiscal Year就会抛出这个类型错误。
控制台能打印出完整数据是因为console.log对对象类型的输出持有的是对象引用,你手动展开控制台日志时API请求已经完成、对象已经被填充了完整字段,这不能代表组件渲染执行到属性判断逻辑的瞬间,嵌套数据已经加载完成。

修复方法

用可选链操作符?.做全链路的空值校验,只要属性路径上任意一层不存在,就会短路返回undefined,不会触发属性读取错误,修正后的代码如下:

<Grid >
  <Typography variant="body1">Fiscal Year </Typography>
</Grid>
<TableContainer style={{width: 600, height: 170}}> 
  {stats ? (
    <Table sx={{alignItems: "center", display: ""}}>
      {/* 对嵌套路径的每一层都做存在性判断 */}
      {stats?.['Financial Highlights']?.['Fiscal Year'] ? (
        <TableBody>
          <TableRow hover>
            <TableCell align="left">Fiscal Year Ends</TableCell>
            <TableCell align="right">
              {stats['Financial Highlights']['Fiscal Year']['Fiscal Year Ends'] === null
                ? "N/A"
                : stats['Financial Highlights']['Fiscal Year']['Fiscal Year Ends']}
            </TableCell>
          </TableRow>
          <TableRow hover>
            <TableCell align="left">Most Recent Quarter (mrq)</TableCell>
            <TableCell align="right">
              {stats['Financial Highlights']['Fiscal Year']['Most Recent Quarter (mrq)'] === null
                ? "N/A"
                : stats['Financial Highlights']['Fiscal Year']['Most Recent Quarter (mrq)']}
            </TableCell>
          </TableRow>
        </TableBody>
      ) : "Loading"}
    </Table>
  ) : <div>Loading...</div>}                        
</TableContainer>

可选优化方案

  • 初始化stats状态时就预设好嵌套结构的默认值,比如const [stats, setStats] = useState({ 'Financial Highlights': { 'Fiscal Year': null } }),从根源上避免中间层属性为undefined的问题
  • 如果项目使用TypeScript,给stats定义明确的嵌套类型,可以在编译阶段提前发现这类非法属性访问问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:27:25