我从服务器中获得了两个值-旧值和新值。在我的redux存储中,我需要将对象键从旧值更改为新值(编辑键值),并将项目数组从旧对象键附加到替换的新对象键。最好的方法是什么?
我试图这样做:
const handleEditFilter = (state, { payload }) => {
const { newValue, oldValue } = payload;
return {
...state,
regions: {
...state.regions,
list: {
...state.regions.list,
[newValue]: [...state.regions.list[oldValue]],
},
},
};
};
但是它只是使用旧数组中的数组项创建一个新对象。如何实际替换对象的键名并附加旧键中的项目?
答案 0 :(得分:1)
首先,复制内部列表:
const list = { ...state.regions.list };
然后替换值:
list[newValue] = list[oldValue];
delete list[oldValue];
然后更新状态:
return {
...state,
regions: {
...state.regions,
list
}
};
要对嵌套对象执行不可变的操作,我更喜欢使用一个库,例如icepick,这将使操作更具可读性(由getIn
,unsetIn
和setIn
组成的链)。