在React中的setState之前编辑this.state内容

时间:2016-02-09 23:45:56

标签: reactjs

我想知道这种代码是否会引起副作用。

假设我在包含数组的组件中有一些状态对象,该数组本身包含具有各种属性的对象:

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创建一个新对象而不是变异,但在这种情况下,我没有看到这样做的重点。

1 个答案:

答案 0 :(得分:1)

唯一的副作用"将使用PureRenderMixin或实现使用浅等式测试的shouldComponentUpdate方法的任何组件可能无法理解该对象确实已经发生了变化。

除此之外,虽然不推荐,但它应该可以正常工作。