Kho*_*hoi 97 javascript reactjs
假设我有一个普通对象列表,this.state.list
然后我可以使用它来渲染子列表.那么将对象插入的正确方法是什么this.state.list
?
以下是我认为它将起作用的唯一方法,因为你不能this.state
像文档中提到的那样直接改变.
this._list.push(newObject):
this.setState({list: this._list});
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎很难看.有没有更好的办法?
Hea*_*eap 164
concat
返回一个新数组,所以你可以做
this.setState({list: this.state.list.concat([newObject])});
Run Code Online (Sandbox Code Playgroud)
另一个选择是React的不变性助手
var newState = React.addons.update(this.state, {
list : {
$push : [newObject]
}
});
this.setState(newState);
Run Code Online (Sandbox Code Playgroud)
小智 40
可以使用函数作为参数调用setState():
this.setState((state) => ({ list: state.list.concat(newObj) }))
Run Code Online (Sandbox Code Playgroud)
或者在ES5中:
this.setState(function(state) {
return {
list: state.list.concat(newObj)
}
})
Run Code Online (Sandbox Code Playgroud)
Ash*_*ary 19
2016年更新
使用ES6,您可以使用:
this.setState({ list: [...this.state.list, ...newObject] });
Run Code Online (Sandbox Code Playgroud)
小智 7
来自react文档(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])
}));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
72463 次 |
最近记录: |