推入状态数组的正确方法

新手上路,请多包涵

我似乎在将数据推送到状态数组时遇到问题。

我正在尝试以这种方式实现它:

this.setState({ myArray: this.state.myArray.push('new value') })

但我相信这是不正确的方式并导致可变性问题?

原文由 Ilja 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 867
2 个回答

数组推送返回长度

this.state.myArray.push('new value') 返回扩展数组的长度,而不是数组本身。 Array.prototype.push()

我猜你希望返回的值是数组。

不变性

这似乎是 React 的行为:

永远不要直接改变 this.state,因为之后调用 setState() 可能

替换您所做的突变。把 this.state 当作是

不可变的。 反应组件

我想,你会这样做(不熟悉 React):

 var joined = this.state.myArray.concat('new value');
 this.setState({ myArray: joined })

原文由 Márton Tamás 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用 es6 可以这样做:

 this.setState({ myArray: [...this.state.myArray, 'new value'] }) //simple value
this.setState({ myArray: [...this.state.myArray, ...[1,2,3] ] }) //another array

传播语法

原文由 Aliaksandr Sushkevich 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题