React Native中如何解决JSON数组拼接时出现嵌套子数组的问题
问题根因
接口返回的json本身是一个包含商品对象的数组,而非单个商品对象。你直接调用push(json)时,会把整个返回的数组作为一个元素插入原有数组,最终形成嵌套结构,和预期的平级数组不符。
另外你直接修改this.state.item_data原有数组的写法不符合React的不可变数据规范,也建议同步调整。
修复后的代码
fetch('https://punjabfoodhub.in/app/reg.php', { method: 'POST', mode: 'no-cors', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ item_id: ids, func: 'item_data', }), }) .then((response) => response.json()) .then((json) => { if (this.state.item_data.length == 1) { // 用展开运算符拆分返回的数组元素,合并到新数组中 this.setState({ item_data: [...this.state.item_data, ...json] }, () => { // setState是异步操作,要在回调里才能拿到最新的state console.log(this.state.item_data); }); } else { this.setState({ item_data: json }); } }) .catch((err) => { console.log(err); });
补充说明
- 用展开运算符
...json可以把返回数组里的所有商品对象拆出来,和原有数组合并成新的平级数组,避免嵌套 - setState是异步方法,直接在setState后打印state拿到的是旧值,要放到回调函数里才能拿到更新后的值
- 不要直接修改state里的原有数组,始终用新数组覆盖的方式更新state,符合React的设计规范,避免出现状态更新异常
内容的提问来源于stack exchange,提问作者Jenil Chavda
相关产品推荐
相关产品推荐

