В итоге многие хранят в стейте список из 100 элементов тупо массивом и удивляются, когда при изменении одного перерендериваются все 100. А если там у элемента еще и поля для ввода…
Конечно если редьюсер написан таким образом, что он просто возвращает новый список, то перерендрится весь список. Но проблема с перерендриванием частично решается простым return state.map(...). В .map вставляем конструкцию if/else, если элемент из state равен элементу из action.payload, то возвращаем элемент из state, иначе возвращаем из action.payload.
Конечно проблемы в таком случае возникают, например если приходится сравнивать глубокие объекты (ну придется заюзать deepEqual, вроде решаемо), более серьезная проблема связана с тем, что length нового списка и списка из state может отличаться, в таком случае возможно легче вернуть новый список и пускай все перерендривается (но думаю можно повыпендриваться и что-то придумать).
Поэтому кажется, что способы хранить как массив и как объект имеют место жизни, однако я бы сам предпочел хранить конечно объектом.
Конечно если редьюсер написан таким образом, что он просто возвращает новый список, то перерендрится весь список. Но проблема с перерендриванием частично решается простым return state.map(...). В .map вставляем конструкцию if/else, если элемент из state равен элементу из action.payload, то возвращаем элемент из state, иначе возвращаем из action.payload.
Конечно проблемы в таком случае возникают, например если приходится сравнивать глубокие объекты (ну придется заюзать deepEqual, вроде решаемо), более серьезная проблема связана с тем, что length нового списка и списка из state может отличаться, в таком случае возможно легче вернуть новый список и пускай все перерендривается (но думаю можно повыпендриваться и что-то придумать).
Поэтому кажется, что способы хранить как массив и как объект имеют место жизни, однако я бы сам предпочел хранить конечно объектом.