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

React+TypeScript读取JSON时报array_google未定义错误求助

问题根因

TypeScript 的类型声明仅做编译时静态校验,不会影响运行时的实际数据结构。你遇到的报错 TypeError: Cannot read properties of undefined (reading 'array_google') 说明运行时 data.ids 的值为 undefined,和你定义的 ResponseData 结构不匹配。

排查&解决步骤
  • 第一步:校验后端返回的实际结构
    打开浏览器控制台,查看 fetchData 函数里 console.log(data) 的输出,确认实际返回的 JSON 结构是否包含 ids 字段。多数情况下该报错是因为后端返回的结构直接是 iData 结构,没有套一层 ids,或者字段名拼写/大小写和定义不符(比如是 id、Id 而非 ids)。
    举个例子:如果后端实际返回的结构是 {array_google: [], array_iu: [], time: 123},你定义的 ResponseData 多套了一层 ids,就会导致 data.ids 为 undefined。
  • 第二步:修正类型定义和取值逻辑
    如果确认后端返回没有 ids 外层,把 ResponseData 的定义修改为:
    export type ResponseData = iData;
    
    对应 App.tsx 里给 Map_test 传值的代码修改为 google_list={data.array_google} 即可。
    如果后端确实返回了带 ids 的结构,只需调整类型定义里的字段名,和实际返回的拼写、大小写完全一致即可。
  • 第三步:增加运行时空校验兜底
    哪怕类型定义完全匹配,也建议加可选链操作符避免类似报错,把传值代码修改为:
    <Map_test
      google_list={data?.ids?.array_google || []}
    />
    
    同时可以给 Map_test 组件的参数加默认值,避免调用 map 时报错:
    interface Props {
        google_list?: GList[];
    }
    // 组件取参数时设置默认值
    const Map_test: React.FunctionComponent<Props> = ({
        google_list = []
    }) => {
    
  • 第四步:补充接口异常处理逻辑
    你当前的 fetch 代码没有判断请求状态,无论接口返回 4xx、5xx 错误都会直接解析 JSON,很可能拿到非预期结构。建议补充异常处理:
    const fetchData = async () => {
      try {
        const result = await fetch("http://18.223.114.82/pastfive");
        if (!result.ok) throw new Error('接口请求失败')
        const data :ResponseData = await result.json();
        setData(data);
        console.log(data);
      } catch (e) {
        console.error('数据拉取失败', e)
      }
    };
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:18:06