我想知道这种代码是否会引起副作用。
假设我在包含一个数组的组件中有一些状态对象,该数组本身包含具有各种属性的对象:
getInitialState: function () {
return {
willContainObjects: [];
}
现在,我有一个函数可以编辑该对象,然后创建一个新的状态对象:
editObjectInArray: function (index) {
var obj= this.state.willContainObjects[index];
obj.someProp = 3; // mutating this.state!!!
this.setState({
willContainObjects: this.state.willContainObjects.slice(0, index)
.concat(details)
.concat(this.state.willContainObjects.slice(index+1))
}); // end setState
},
obj.someProp = 3
this.state
直接改变状态,但就在调用this.setState
并导致重新渲染之前。在调用之前这种直接的状态突变会setState
产生任何意想不到的副作用吗?我知道 React 建议不要这样做,但我认为这是一个例外。我可以Object.assign
用来创建一个新对象而不是变异,但在这种情况下我没有看到这样做的意义。