Как иммутабельно удалить свойство из массива в редьюсере?

Есть начальное состояние:
const initialState = {
  products: [
    { id: 5 },
    { id: 7 }
  ]
}

И при возникновении экшина удаления продукта с id:7 из корзины, необходимо удалить свойство из состояния.
Ниже пример решения, но насколько оно иммутабельно?
function (state = initialState, action) {
  case REMOVE_PRODUCT_CART:
    return {
      ...state,
      products: state.products.filter(item => item.id !== action.payload)
    } 
}

А так же просветите меня, в редьюсерах по соглашению (архитектуре flux) может быть только одна чистая функция, которая возвращается по умолчанию, или можно плодить там (естественно самое необходимое) функции, к примеру для переиспользование добавить функцию, которая приведена в документации redux
function removeItem(array, action) {
    return array.filter( (item, index) => index !== action.index);
}
  • Вопрос задан
  • 513 просмотров
Решения вопроса 1
Ниже пример решения, но насколько оно иммутабельно?


Это идеально: filter создает новый массив.

может быть только одна чистая функция, которая возвращается по умолчанию, или можно плодить там (естественно самое необходимое) функции


Можно использовать хелперы (тот же lodash\ramda). Главное, чтобы в результате у вас редьюсер был чистой функцией без сайд эффектов (это значит, что все функции, которые используете внутри - также должны быть чистыми).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы