可以在 setState 中修改 prevState 的一部分吗?

Stu*_*ent 4 reactjs

修改 prevState 的一部分并在 setState() 中返回该部分是否有真正的缺点?

例子:

this.setState(prevState => {
    prevState.myObject.isItTrue = !prevState.myObject.isItTrue;
    return {myObject: prevState.myObject};
});
Run Code Online (Sandbox Code Playgroud)

而不是:

this.setState(prevState => {
    const myObject = Object.assign({}, prevState.myObject);
    myObject.isItTrue = !myObject.isItTrue;
    return {myObject: myObject};
});
Run Code Online (Sandbox Code Playgroud)

我保存自己的第一个代码有什么真正的缺点Object.assign()吗?

编辑:如果我是对的,prevState.myObject 只是对 this.state.myObject 的引用,因此更改 prevState.myObject 实际上也会更改 this.myObject.object!然而,这似乎并没有破坏任何东西,只要我使用 setState() 传递一个包含新数据的对象,即使它只是对 this.state 中旧对象的引用。您是否同意这仍然可以,即这样做不会破坏任何事情?

Jos*_*lón 7

以下文档:

state是对应用更改时组件状态的引用。它不应该被直接变异。相反,应该通过基于 state 和 props 的输入构建一个新对象来表示更改。

https://reactjs.org/docs/react-component.html

因此,您不应直接将更改应用于该状态。

无论哪种方式,为什么不做这样的事情?:

this.setState(prevState => ({
    myObject : {
        ...prevState.myObject,
        isItTrue: !prevState.myObject.isItTrue,
    }
}));
Run Code Online (Sandbox Code Playgroud)

这种方式将从prevState 中获取所有元素,但也会更改所有要修改的元素。