#reactjs #redux #react-redux
#reactjs #redux #реагировать-redux
Вопрос:
Согласно шаблонам проектирования Redux, если вы хотите изменить объект в массиве, вы должны использовать state.items.map , но можно ли использовать array.findIndex и, если элемент не найден, вернуть старое состояние? Это плохая практика, если да, то почему?
-
Метод Redux pattern. Метод возвращает новое состояние, даже если комната не найдена.
const roomId = action.payload.room.id;
const roomsList = state.roomsList.map(room => {
if (room.id === roomId) {
return action.payload.room;
} else {
return room;
}
});
return {
...state,
roomsList,
};
-
Второй способ, который мне нравится больше. Метод возвращает новое состояние, только если найдена комната с заданным идентификатором
const roomId = action.payload.room.id;
const idx = state.roomsList.findIndex(room => room.id === roomId);
if(idx!==-1) {
const roomsList = Array.from(state.roomsList);
roomsList[idx] = action.payload.room;
return {
...state,
roomsList,
};
}else{
return state;
}
Ответ №1:
Всегда можно вернуть предыдущее состояние, если редуктор не вносил никаких изменений.
Это то, что в default
случае обычно выполняется в обычной switch
функции-редукторе, как в примере из официальных redux
документов.