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

ReactJS多次setState后arr.map()返回undefined问题求助

问题原因与解决办法

嘿,我一眼就看出问题出在哪了!你之前的正常代码里,this.state.data是一个一维的issue对象数组,但后来修改setState的时候,你把myJson.issues整个数组作为一个元素塞进了data里——这就导致data变成了数组套数组的结构!

举个例子:假设原来data是[issue1, issue2],新的myJson.issues是[issue3, issue4],你现在的写法会让data变成[[issue1, issue2], [issue3, issue4]]。这时候你用map遍历data,每个item都是一个子数组,而子数组根本没有id、example这些属性,所以返回的对象里这些值自然都是undefined啦!

第一步:修正setState的写法

你需要把新获取到的myJson.issues里的每一个元素都展开合并到原数组中,而不是把整个数组当元素添加。把setState的代码改成这样:

.then((myJson) => this.setState({data: [...this.state.data, ...myJson.issues]}));

这里用了两个扩展运算符...,第一个展开原data数组的元素,第二个展开myJson.issues的元素,最终得到的是一个一维的issue对象数组,和你之前正常工作时的结构一致。

第二步:注意setState的异步特性

另外还要提醒你:setState是异步执行的!如果你在调用setState之后立刻去map this.state.data,很可能拿到的还是更新前的旧状态。所以如果要在状态更新后立刻处理数据,应该用setState的回调函数:

.then((myJson) => {
  this.setState(
    {data: [...this.state.data, ...myJson.issues]},
    () => {
      // 这里的代码会在状态更新完成后执行
      const result = this.state.data.map(item => ({
        id: item.id,
        example: item.example
      }));
      console.log(result);
    }
  );
});

修正后的完整代码示例

fetchTable() {
  const url = 'http://localhost:8000/issues/assigned/';
  const value = this.state.selectedOption;
  const string = url + value;
  fetch(string)
    .then(function(response) {
      return response.json();
    })
    .then((myJson) => {
      this.setState(
        {data: [...this.state.data, ...myJson.issues]},
        () => {
          const result = this.state.data.map(item => ({
            id: item.id,
            example: item.example
          }));
          console.log(result);
        }
      );
    });
}

这样修改后,你的map操作就能正常拿到每个issue对象的属性,不会再返回undefined啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:03:12