簡體   English   中英

React Redux 如何更新購物車中的產品數量

[英]React Redux how to update product quantity in shopping cart

我在 redux 有一家商店。 有2個arrays,女產品和購物車產品

const defaultState = {
  womanProducts: 
    [
       {name: "Mini Skirt", img: "https://static.pullandbear.net/2/photos//2022/I/0/1/p/8399/316/800/8399316800_4_1_8.jpg?t=1656932863233&imwidth=563", price: 35, inCart: 1, id: 1}, 
       {name: "Basic Jeans", img: "https://static.pullandbear.net/2/photos//2022/I/0/1/p/8685/326/400/8685326400_4_1_8.jpg?t=1657798996961&imwidth=563", price: 39, inCart: 1, id: 2}, 
       {name: "Fit Dress", img: "https://static.pullandbear.net/2/photos//2022/V/0/1/p/4390/422/611/4390422611_4_1_8.jpg?t=1643722977148&imwidth=563", price: 45, inCart: 1, id: 3}, 
       {name: "Basic Sweatshirt", img: "https://static.pullandbear.net/2/photos//2021/I/0/1/p/8393/363/485/8393363485_4_1_8.jpg?t=1634212398331&imwidth=563", price: 29, inCart: 1, id: 4}
    ],
 cartProducts: [], 
}

然后我發送 cartProducts 並將女性產品添加到購物車(案例“ADD_PRODUCTS”將產品添加到購物車中,“REMOVE_FROM_CART”從購物車中刪除項目)它運行良好,但“INCREMENT_PRODUCT”不起作用

const reducer = (state = defaultState, action) => {
   switch(action.type) {
      case "ADD_PRODUCTS":
         return {...state, cartProducts: [...state.cartProducts, action.payload]}
      case "REMOVE_FROM_CART":
         return {...state, cartProducts: state.cartProducts.filter((event) => event.id !== action.payload)}

      case "INCREMENT_PRODUCT":
         return {
            ...state, 
            cartProducts: state.cartProducts.map((item) => item.inCart + action.payload)}

      default:
        return state
}

但是現在我需要通過單擊按鈕來增加和減少購物車中的產品

購物車組件:

return(
    <div className="cart">
        {cartProducts.length > 0 ? cartProducts.map(item => 
            <div className="cartItem" key={item.id}>
                <img src={item.img} />
                <div className="cartItemInfo">
                    <div className="itemInfo">
                        <h3>{item.name}</h3>
                        <h3>{item.price}$</h3>
                    </div>
                    <div className="quantity">
                        <button onClick={() => decrementProduct()}>-</button>
                        <p>{item.inCart}</p>
                        <button onClick={() => incrementProduct()}>+</button>
                    </div>
                    <div className="itemDelete">
                        <button onClick={() => removeItem(item.id)}><img src={require('../images/icons/trashCanIcon.png')} /></button>
                    </div>
                </div>
            </div>
        ): <h1>Cart is empty</h1>}
        {cartProducts.length > 0 ? <h1 className="totalPrice">Total Price: {totalPrice}$</h1> : <></>}
    </div>
)

和 function 增加產品

function incrementProduct() {
   dispatch({type: "INCREMENT_PRODUCT", payload: 1})
}

您增加了所有產品的產品數量。 你可以試試這段代碼。

case "INCREMENT_PRODUCT":
         return {
            ...state, 
            cartProducts: state.cartProducts.map((item) => ({
id: item.id, 
inCart: item.id === action.payload.id ? item.inCart + action.payload.increment : item.inCart
}));

首先你應該改變你的有效載荷。 它需要項目 ID 來確定您要增加的項目

dispatch({type: "INCREMENT_PRODUCT", payload: {id: 1, increment: 1}})

現在,您可以 map 購物車產品; 如果商品 ID 與購物車商品 ID 相同,則遞增或僅返回商品


case "INCREMENT_PRODUCT":
            return {
                ...state,
                cartProducts: state.cartProducts.map((item) => {
                    if(item.id === action.payload.id) {
                        item.inCart += action.payload.increment;
                    }
                    return item;
                })
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM