【问题标题】:map is not a function ERROR after using push on an array in REACT在 REACT 中对数组使用 push 后,map 不是函数错误
【发布时间】:2019-01-06 17:42:37
【问题描述】:

我在函数(事件)中将一个元素推送到数组中, 将此元素推送到数组后,出现此错误,

handleAddList(s) {
  this.setState({lists :this.state.lists.push(s) });
  console.log(this.state.lists);
}

lists.map 不是函数。 列出一个反应组件

如果我这样写

handleAddList(s) {
  this.setState({lists :['something','something else']});
  console.log(this.state.lists);
}

但是当我手动定义列表时,它运行良好。就在我在数组中推送一个新元素时,我得到了这个错误。此外,如果 push 破坏了数组。 最好的问候

【问题讨论】:

  • 使用 concat 代替 push 可以解决问题

标签: javascript arrays reactjs dictionary push


【解决方案1】:

push 的结果是数组的长度,这不是你想要的。您想创建一个包含新对象的新数组:

handleAddList(s) {
  this.setState(
    previousState => {
      return { lists: [...previousState.lists, s] };
    },
    () => {
      console.log(this.state);
    }
  );
}

【讨论】:

    【解决方案2】:

    push返回添加元素后的数组长度而不是数组,你需要的是concat

    handleAddList(s) {
        this.setState({lists :this.state.lists.concat([s]) });
    }
    

    还有setState doesn't update the state immediately你需要像这样使用回调

    handleAddList(s) {
        this.setState({lists :this.state.lists.concat([s]) }, () => { console.log(this.state.lists)});
    }
    

    【讨论】:

    • 非常感谢我亲爱的朋友。这是一个很大的帮助。谢谢
    • @mojtaba1 很高兴能帮上忙 :-)
    猜你喜欢
    • 2017-08-16
    • 2020-09-20
    • 1970-01-01
    • 2018-01-16
    • 2021-11-18
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    相关资源
    最近更新 更多