改变React状态的首选方式是什么?

假设我有一个普通对象列表,this.state.list然后可以用来呈现子级列表。那么将对象插入其中的正确方法是什么this.state.list

以下是我认为它将起作用的唯一方法,因为您不能this.state像文档中提到的那样直接更改。

this._list.push(newObject):
this.setState({list: this._list});

这对我来说似乎很丑。有没有更好的办法?

JinJin猪猪2020/03/12 16:23:58

setState()可以使用函数作为参数来调用:

this.setState((state) => ({ list: state.list.concat(newObj) }))

或在ES5中:

this.setState(function(state) {
  return {
   list: state.list.concat(newObj)
  }
})
斯丁卡卡西2020/03/12 16:23:58

更新2016

使用ES6,您可以使用:

this.setState({ list: [...this.state.list, ...newObject] });
路易Stafan2020/03/12 16:23:58

从react docs(https://facebook.github.io/react/docs/state-and-lifecycle.html#state-updates-may-be-asynchronous)中:

由于this.props和this.state可以异步更新,因此您不应依赖于它们的值来计算下一个状态。

因此,您应该这样做:

this.setState((prevState) => ({
  contacts: prevState.contacts.concat([contact])
}));
番长前端2020/03/12 16:23:58

concat 返回一个新的数组,所以你可以做

this.setState({list: this.state.list.concat([newObject])});

另一个选择是React的不变性助手

  var newState = React.addons.update(this.state, {
      list : {
        $push : [newObject]
      }
  });

  this.setState(newState);