假设我有一个州
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
答案 0 :(得分:2)
您可以只使用点差运算符,而不是使用Lodash。
此示例假定inner1
和inner2
上的属性多于您的问题中说明的属性。如果没有,差价就完全过时了。
this.setState((prevState) => ({
inner1: {
...prevState.inner1,
inner2: {
...prevState.inner2,
foo: var2,
},
},
}));