首页 > 解决方案 > 在setState里面修改prevState的一部分可以吗?

问题描述

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

例子:

this.setState(prevState => {
    prevState.myObject.isItTrue = !prevState.myObject.isItTrue;
    return {myObject: prevState.myObject};
});

而不是:

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

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

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

标签: reactjs

解决方案


以下文档:

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

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

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

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

this.setState(prevState => ({
    myObject : {
        ...prevState.myObject,
        isItTrue: !prevState.myObject.isItTrue,
    }
}));

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


推荐阅读