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

#reactjs #react-redux

#reactjs #реагировать-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:

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

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

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

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

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

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

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