假设我有一个状态
state = {
inner1: {
inner2: {
foo: var1
}
}
}
我想将
foo
更新为 var2
。我是否应该创建
state
inner1
inner2
的副本,以便shallowEqual 会看到 state
inner1
inner2
已更改?在代码中,它会是这样的
newState = _.merge({}, state, {
inner1: {
innner2: {
foo: var2
}
}
})
(虽然我不完全确定 _.merge 是如何工作的,但有时似乎违反直觉)
因此,从概念上讲,我正在创建一个浅拷贝,直到(嵌套级别)找到我想要更改的对象。
还是只更新
inner2
更合适?var { inner2 } = state.inner1
var newInner2 = _.merge({}, inner2, {
foo: var2
})
state.inner2 = newInner2
最佳答案
您可以不使用 Lodash,而是使用扩展运算符。
此示例假设 inner1
和 inner2
上的属性比您的问题中说明的属性多。如果没有,点差就完全过时了。
this.setState((prevState) => ({
inner1: {
...prevState.inner1,
inner2: {
...prevState.inner2,
foo: var2,
},
},
}));
关于reactjs - react ,关于不改变状态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43670348/