我想知道在React / Redux世界之间有什么区别
C
还有这个
let newState = Object.assign({}, state);
newState[action.componentDescriptor.name][action.id].Value = action.value;
return newState;
似乎前者不会触发渲染(似乎没有被识别为状态变化)。但是后者被认为是状态变化并触发渲染。两者都返回新对象(状态)?
答案 0 :(得分:1)
在前一个版本中,您只使用一次Object.assign
,这只会创建一个浅表副本。这意味着您的对象仅被复制一个级别,并且所有嵌套属性都指向相同的引用。因此,当您直接更改它时,Redux无法理解它们之间的区别。
在下一个版本(我想您做对了)中,您正在更改状态而没有适当地更改原始版本。您正在使用Object.assign
创建嵌套属性的副本。这就是与众不同的原因。
对于更干净的版本,您可以使用spread syntax。
return {
...state,
[action.componentDescriptor.name]: {
...state[action.componentDescriptor.name],
[action.id]: {
...state[action.componentDescriptor.name][action.id],
Value: action.value,
}
}
}
或者您可以normalize your state避免太多嵌套的突变。