@Listrigon

React/Redux работа редьюсера?

Как пишут в туториалах данные в редьюсерах не должны мутироваться, а должны заменяться.

Предположим у нас есть редьюсер, хранящий массив Пользователей, т.е. state это [ ], у каждого пользователя есть набор свойств.

В редьюсере есть несколько действий, добавить, удалить, изменить свойство.

1. Мы хотим добавить нового пользователя. Как правильно сделать:
а. Взять массив state добавить в него новый элемент и вернуть state.
б. Клонировать state, уже в него добавить новый элемент и вернуть этот state.
в. Другой вариант.

2. Мы хотим изменить имя пользователя. Как правильно сделать:
a. Находим в state этого пользователя, клонируем объект пользователя, изменяем у нового объекта свойство, земеняем в state старый объект на новый, возвращаем state.
б. Просто находим пользователя в массиве state, присваиваем новое значение свойству, делаем клонирование всего state и возвращаем уже его.
в. Другой вариант.
  • Вопрос задан
  • 274 просмотра
Решения вопроса 1
@davidnum95
Если без immutablejs, то:
1.
return {
        ...state,
        items: [
          ...state.items,
          action.payload,
        ],

2.
return {
        ...state,
        items: state.items.map((item) => {
          if (item.id === action.payload.id) {
            return {
              ...item,
              name: action.payload.name,
            };
          }
          return item;
        }),
      };
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы