#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
).