2 回答

TA貢獻1821條經驗 獲得超5個贊
您的代碼是正確的,但是您需要為每個具有特定屬性的產品提供唯一的產品 ID。例如
Product: { id: 'Nike' size: ['S', 'M', 'L'] color: ['blue', 'white', 'black']}
您的購物車有多個項目,其中此產品示例的 ID 為:'Nike,s,blue'。每次您嘗試使用該特定 ID 查找此產品時,您都可以將其添加為新產品或增加它(如果已存在)。
您可以對 T 恤“L”采用相同的邏輯,其中其 ID 為:“Nike,L,blue”。它使它成為一個新產品并分開。
簡而言之:您需要為每個產品制作一個唯一的 ID 及其屬性(您可以根據您擁有數據的 Object.values 或數組將屬性與 ID 組合)。

TA貢獻1820條經驗 獲得超10個贊
你幾乎完成了,只需檢查大小是否相等(在 findIndex 和隨后的 if 中):
const productId = action.product.id;
const size = action.size;
if (findIndex(state.cart, product => (product.id === productId && product.size === size)) !== -1) {
const cart = state.cart.reduce((cartAcc, product) => {
if (product.id === productId && product.size === size) {
cartAcc.push({ ...product, size: size, qty: parseInt(product.qty) + parseInt(action.qty), sum: (product.discount ? product.salePrice : product.price) * (parseInt(product.qty) + parseInt(action.qty)) }) // Increment qty
} else {
cartAcc.push(product)
}
return cartAcc
}, [])
return { ...state, cart }
}
添加回答
舉報