我的状态模型如下
export interface State {
[key: string]: UnitState;
}
所以State持有所有单位的状态,键为unitID。所以它最好看起来像这个
{ 'ABC': {unitName: 'John', unitOpen: 'true'},
'XYZ': {unitName: 'Peter', unitOpen: 'false'}
}
现在,当我想在减速器中进行一些状态更新时,我该怎么做?我试过这样的东西,但没用。我在这里查看了其他帖子,但没有一个有密钥索引数组的例子
case 'UPDATE_UNIT_NAME': {
const stateCopy = Object.assign({}, state);
const name = action.name;
stateCopy[unitId] = { ...stateCopy[unitId], unitName: name};
return {...state, stateCopy};
}
问题
- 您的状态不是一个数组,而是一个对象
- 您正在复制您的状态,但随后将更新后的状态嵌套在
stateCopy
属性下的下一个状态对象中,我猜这不是您想要的结果
解决方案
浅层复制状态以及正在更新的任何嵌套属性。
case 'UPDATE_UNIT_NAME': {
const { name } = action;
return {
...state, // <-- shallow copy state object
[unitId]: {
...state[unitId], // <-- shallow copy nested unit object
unitName: name // <-- update specific property
},
};
}