React Native请求报错:TypeError: Cannot read property 'votes' of undefined
问题分析与解决:TypeError: Cannot read property 'votes' of undefined
核心问题
前端调用fetch获取后端数据时出现两个关键错误:
TypeError: Cannot read property 'votes' of undefined:后续逻辑尝试访问undefined对象的votes属性TypeError: Already read:Response对象的响应体被重复读取
错误原因
- 第一个then回调未返回解析后的Promise:原代码中第一个
then执行了resp.json()但没有返回结果,导致第二个then接收的json参数为undefined,自然无法访问json.votes。 - 重复读取响应体:原代码在同一个
then里连续调用两次resp.json(),而Response的响应体只能被读取一次,第二次调用直接抛出Already read错误。
修复方案
修改getData方法,确保只读取一次响应体,并且正确返回解析后的Promise传递给后续逻辑:
const getData = () => { setOnRefresh(true); fetch('https://soppinga.com/api/Home?guid=' + route.params.id + "&userId=" + "1", { method: 'GET', headers: { 'Content-Type': 'application/json' }}) .then((resp) => { console.log(resp); // 打印响应元数据,此时响应体未被读取 return resp.json(); // 返回解析JSON的Promise,供下一个then处理 }) .then((json) => { console.log(json); // 打印完整的返回数据 loadData(json); setOnRefresh(false); }) .catch((error) => { console.log(">>> " + error); }) .finally(() => null); }
补充说明
- 后端接口返回的数据结构完全正常,只要前端正确接收,就能正常访问
json.poll和json.votes。 - 之前功能正常可能是因为代码没有重复读取响应体,且正确返回了解析后的Promise,后续修改日志逻辑时不小心破坏了这一点。
内容的提问来源于stack exchange,提问作者redoc01
相关产品推荐
相关产品推荐

