Изменить свойство ключа объекта в редукторе

У меня есть два значения с сервера - старое значение и новое значение. В моем хранилище redux мне нужно изменить ключ объекта со старого значения на новое (изменить значение ключа) и присоединить массив элементов из старого ключа объекта к замененному новому ключу объекта. Как лучше всего это сделать?

Я пробовал сделать что-то вроде этого:

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

Но он просто создает новый объект с элементами массива из старого массива. Как на самом деле заменить ключевое имя объекта и прикрепить элементы из старого ключа?


person s_kamianiok    schedule 15.04.2019    source источник


Ответы (1)


Прежде всего, скопируйте внутренний список:

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

затем замените значение:

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

Затем обновите состояние:

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

Для выполнения неизменяемых операций с вложенными объектами я предпочитаю использовать библиотеку, например icepick, что сделает операцию немного более читаемой (цепочка из getIn, unsetIn и setIn).

person Sulthan    schedule 15.04.2019