reactjs - 在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 中旧对象的引用。您是否同意这仍然可以,即这样做不会破坏任何东西?
解决方案
以下文档:
state是对应用更改时组件状态的引用。它不应该直接突变。相反,应该通过基于状态和道具的输入构建一个新对象来表示更改。
https://reactjs.org/docs/react-component.html
因此,您不应将更改直接应用于该状态。
无论哪种方式,为什么不做这样的事情?:
this.setState(prevState => ({
myObject : {
...prevState.myObject,
isItTrue: !prevState.myObject.isItTrue,
}
}));
这种方式将从prevState中获取所有元素,但也会更改您要修改的所有元素。
推荐阅读
- java - 带有 AWS S3 的 RESTFUL API
- javascript - 将 react 中的功能组件转换为基于类的组件
- java - 传输 ArrayList
元素到二维数组 String - .net-core-3.0 - 如何在 .net core 3.0 中阅读正文内容?
- node.js - Discord.js 语音机器人在播放本地 mp3 文件时中断
- android - ExtendedFloatingActionButton - 如何在按钮扩展时达到与收缩时相同的高度
- scala - 如何从类型参数中获取类
- java - 如何制作安全的可执行文件?
- r - 缩放 LDA 决策边界
- scala - 导入没有包的scala对象