在Reducer中更改对象键属性

时间:2019-04-15 12:46:23

标签: reactjs react-redux

我从服务器中获得了两个值-旧值和新值。在我的redux存储中,我需要将对象键从旧值更改为新值(编辑键值),并将项目数组从旧对象键附加到替换的新对象键。最好的方法是什么?

我试图这样做:

const handleEditFilter = (state, { payload }) => {
  const { newValue, oldValue } = payload;
  return {
    ...state,
    regions: {
      ...state.regions,
      list: {
        ...state.regions.list,
        [newValue]: [...state.regions.list[oldValue]],
      },
    },
  };
};

但是它只是使用旧数组中的数组项创建一个新对象。如何实际替换对象的键名并附加旧键中的项目?

1 个答案:

答案 0 :(得分:1)

首先,复制内部列表:

const list = { ...state.regions.list };

然后替换值:

list[newValue] = list[oldValue];
delete list[oldValue];

然后更新状态:

return {
  ...state,
  regions: {
     ...state.regions,
     list
  }
};

要对嵌套对象执行不可变的操作,我更喜欢使用一个库,例如icepick,这将使操作更具可读性(由getInunsetInsetIn组成的链)。