Пишу для практики интернет-магазин (без бекэнда, только стадия добавления корзину). Использую 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 компоненты неизменяемы.