【发布时间】:2020-07-23 06:01:39
【问题描述】:
我刚开始编程,最近用 React 编写了我的第一个应用程序,虽然它确实有效,但我不确定我是否正确处理了我的内部状态。我的问题是 setState 方法是否创建了“prevState”的不可变深层副本?举个例子:
menuAddRecHandler = () => {
this.setState((prevState) => {
const updatedState = {...prevState};
const dayInd = updatedState.menu.recipes.findIndex(item => item.dayNum === updatedState.menuInternal.currentDay);
updatedState.menu.recipes[dayInd].recList.push({
name: prevState.menuInternal.menuRecSelect,
portions: prevState.menuInternal.menuNumPortInput
});
return updatedState;
})
}
在我的处理程序中,我将一个对象推送到 updatedState 对象的嵌套数组,该数组是由扩展运算符从 prevState 复制过来的。现在我知道扩展操作符只做一个浅拷贝,但是 setState 方法内部提供的 prevState 也是浅的,这是否意味着我实际上是通过调用这个处理程序直接改变我的状态?如果是这样,我该如何解决这个问题?谢谢。
【问题讨论】:
标签: reactjs state immutability setstate