@HellYeahOmg

Как порешать ситуацию с дубликатами?

Пишу для практики интернет-магазин (без бекэнда, только стадия добавления корзину). Использую react и redux.
Все загруженные продукты содержаться в store.products.items.
Все добавленные в корзину продукты содержатся в store.cart.items.
Редюсер для корзины:
var initialState = {
  items: [],
  totalPrice: 0
};

const addTotalPrice = (oldPrice, newPrice) => oldPrice + newPrice;
const reduceTotalPrice = (oldPrice, priceToDelete) => oldPrice - priceToDelete;

export const cartReducer = (state = initialState, action) => {
  switch (action.type) {
    case "ADD_TO_CART":
      return {
        ...state,
        items: [...state.items, action.payload],
        totalPrice: addTotalPrice(state.totalPrice, action.payload.price)
      };
    case "DELETE_FROM_CART":
      return {
        ...state,
        items: state.items.filter(book => book.id !== action.payload.id),
        totalPrice: reduceTotalPrice(state.totalPrice, action.payload.price)
      };
    default:
      return state;
  }
};

Проблема - удаление дубликатов товаров.
На данный момент при удалении одного из таких товаров удаляются все подобные из store, но из ui удаляется только 1 штука, аналогично с ценой (вычитается как будто 1 штука)

Была идея с добавлением свойства, например, count, потом тупо умножать цену на count и получать нормальный результат, но в React компоненты неизменяемы.
  • Вопрос задан
  • 98 просмотров
Решения вопроса 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
1. Считать totalPrice и хранить в редьюсере - плохое решение. Изменять сумму на основе предыдущего значения - решение еще хуже. Напишите селектор, который будет считать totalPrice на основе cart.items или считайте сумму каждый рендер.
2. Не позволяйте добавлять дубликат товара. Вместо этого увеличивайте количество.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
04 мая 2024, в 17:35
150000 руб./за проект
04 мая 2024, в 17:22
1000 руб./за проект
04 мая 2024, в 17:09
30000 руб./за проект