Во-первых, у действия всегда должны быть type
и payload
, где полезной нагрузкой является объект, содержащий ваши данные, в данном случае продукт.
Во-вторых, количество должно бытьчасть каждого продукта в вашем массиве cart
, чтобы вы могли отслеживать каждый продукт.
Чем бы я сделал следующее:
const { type, payload } = action // extract the type and payload before the switch statement
case ADD_TO_CART: {
const productId = payload.product.id
if (state.cart.findIndex(product => product.id === productId) !== -1) {
const cart = state.cart.reduce((cartAcc, product) => {
if (product.id === productId) {
cartAcc.push({ ...product, qty: product.qty++ }) // Increment qty
} else {
cartAcc.push(product)
}
return cartAcc
}, [])
return { ...state, cart }
}
return { ...state, cart: [...state.cart, { ...payload.product, qty: 0 }] }
}