【发布时间】:2018-11-27 12:33:44
【问题描述】:
我了解到不建议直接更新状态,例如:
this.state.array = ['element'];
但是,例如,考虑这种状态:
this.state = {
array: [],
}
updateArray = element => {
temp = this.state.array;
temp.push(element);
this.setState({array: temp});
}
这不是和第一个例子本质上一样吗?我们将 temp 设置为指向 this.state.array,从而对其进行变异,然后用 this.setState() 覆盖它。
我在各种教程中都看到过这个例子,制作数组的副本不是“更好”吗?
【问题讨论】:
-
在第一个例子中,我猜它不会改变状态,也不会触发重新渲染
-
你是对的,这不是推荐的方法,而是克隆数组,这样你就可以在克隆的数组上不可变地工作,例如
temp = [...this.state.array]; -
如果问题是关于不变性,那么:
this.setState({ array: [ ...this.state.array, element ] })可能是最简单、最现代的方法。 -
或者更好:
this.setState( prevState => ( { array: [ ...prevState.array, element ] } ))
标签: javascript reactjs