gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 18:40:45 25 4
gpt4 key购买 nike

修改 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 中旧对象的引用。
您是否同意这仍然可以,即这样做不会破坏任何事情?

最佳答案

首先 prevStatethis.state 是同一个对象。所以你是直接修改实际状态。

其次,在接下来的过程中,您可能会将 myObject 作为 Prop 传递给另一个组件,并且由于它始终是同一个对象,因此该组件不会知道某些内容已更改并且不会重新渲染(例如 PureComponent 和实现componentDidUpdateshouldComponentUpdate 并测试更改)

有关所有问题的展示,请参阅 https://codesandbox.io/s/zen-aryabhata-m07l4

所以你应该使用

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

关于reactjs - 可以在 setState 中修改 prevState 的一部分吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56463068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com