Javascript 对象单独分配不';不要在React中触发状态变化
我想知道在React/Redux世界中,这两者之间的区别是什么Javascript 对象单独分配不';不要在React中触发状态变化,javascript,reactjs,redux,Javascript,Reactjs,Redux,我想知道在React/Redux世界中,这两者之间的区别是什么 let newState = Object.assign({}, state); newState[action.componentDescriptor.name][action.id].Value = action.value; return newState; 还有这个 return Object.assign({}, state, { [action.componentDescriptor.name]
let newState = Object.assign({}, state);
newState[action.componentDescriptor.name][action.id].Value = action.value;
return newState;
还有这个
return Object.assign({}, state, {
[action.componentDescriptor.name]: objectAssign({}, state[action.componentDescriptor.name], {
[action.id]: objectAssign({}, state[action.componentDescriptor.name][action.id], {
Value: action.value
})
})
});
前者似乎不会触发渲染(似乎不会被视为状态更改)。但后者被识别为状态更改并触发渲染。两者都返回新对象(状态)在前一个对象中,您使用的是
对象。分配
一次,这只会创建一个浅拷贝。这意味着仅为一个标高复制对象,并且所有嵌套特性都指向相同的参照。因此,当您直接更改它时,Redux无法理解其区别
在后一种情况下(我认为你做得对),你改变了你的状态,而没有改变原来的状态。您正在使用对象创建嵌套属性的副本。分配。这就是区别所在
对于更干净的版本,您可以使用
或者你可以避免这么多嵌套突变。请提供你的状态
结构和操作
结构
return {
...state,
[action.componentDescriptor.name]: {
...state[action.componentDescriptor.name],
[action.id]: {
...state[action.componentDescriptor.name][action.id],
Value: action.value,
}
}
}