Reactjs 在React中设置状态之前编辑此。状态内容
我想知道这种代码是否会产生副作用 假设我在一个组件中有一个状态对象,该组件包含一个数组,该数组本身包含具有各种属性的对象:Reactjs 在React中设置状态之前编辑此。状态内容,reactjs,Reactjs,我想知道这种代码是否会产生副作用 假设我在一个组件中有一个状态对象,该组件包含一个数组,该数组本身包含具有各种属性的对象: getInitialState: function () { return { willContainObjects: []; } 现在,我有一个函数,它将编辑该对象,然后创建一个新的状态对象: editObjectInArray: function (index) { var obj= this.state.willCon
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
来创建一个新对象,而不是进行变异,但在这种情况下,我看不出这样做有什么意义。唯一的“副作用”任何使用PureRenderMixin或实现使用浅层相等测试的shouldComponentUpdate
方法的组件都可能无法理解对象确实发生了更改
除此之外,虽然不推荐,但它应该可以正常工作。@zerkms这不是真的。React不假定处于
状态的对象是不可变的。您必须通过实现组件shoulldupdate
来选择该假设。OP并没有改变这个.state
。OP正在变异此.state
的子对象。默认情况下,只要您最终调用this.setState()
或this.forceUpdate()
@zerkms,React就会尊重这种突变?请特别注意“注释”部分,特别是关于您所在州的可变对象的内容。@Brandon现在这是一个答案。