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的定义修改为:
对应 App.tsx 里给export type ResponseData = iData;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
相关产品推荐
相关产品推荐

