Изменить объект в массиве, если он найден по id - PullRequest
1 голос
/ 26 марта 2019

В соответствии с шаблонами проектирования Redux, если вы хотите изменить объект в массиве, вы должны использовать state.items.map, но нормально ли использовать array.findIndex, и если элемент не найден, вернуть старое состояние? Это плохие практики, если да, то почему?

  1. Метод шаблона Redux. Метод возвращает новое состояние, даже если комната не найдена.

    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, };

  2. Второй способ, который мне нравится больше. Метод возвращает новое состояние, только если найдена комната с заданным идентификатором

    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 Ответ

1 голос
/ 26 марта 2019

Это всегда можно вернуть предыдущее состояние, если редуктор не внес никаких изменений.

Это то, что обычно делает default в обычном switch в функции редуктора, как в примере из официальных redux документов .

...