• React Redux 如何更新购物车中的产品数量


    问题描述:

    我在 redux 有一家商店。有 2 个数组,womanProducts 和 cartProducts

    1. const defaultState = {
    2. womanProducts:
    3. [
    4. {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},
    5. {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},
    6. {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},
    7. {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}
    8. ],
    9. cartProducts: [],
    10. }

    然后我发送 cartProducts 并将女性产品添加到购物车(案例“ADD_PRODUCTS”将产品添加到购物车中,“REMOVE_FROM_CART”从购物车中删除项目),它运行良好,但“INCREMENT_PRODUCT”不起作用

    1. const reducer = (state = defaultState, action) => {
    2. switch(action.type) {
    3. case "ADD_PRODUCTS":
    4. return {...state, cartProducts: [...state.cartProducts, action.payload]}
    5. case "REMOVE_FROM_CART":
    6. return {...state, cartProducts: state.cartProducts.filter((event) => event.id !== action.payload)}
    7. case "INCREMENT_PRODUCT":
    8. return {
    9. ...state,
    10. cartProducts: state.cartProducts.map((item) => item.inCart + action.payload)}
    11. default:
    12. return state
    13. }

    但是现在我需要通过单击按钮来增加和减少购物车中的产品

    购物车组件:

    1. return(
    2. <div className="cart">
    3. {cartProducts.length > 0 ? cartProducts.map(item =>
    4. <div className="cartItem" key={item.id}>
    5. <img src={item.img} />
    6. <div className="cartItemInfo">
    7. <div className="itemInfo">
    8. <h3>{item.name}h3>
    9. <h3>{item.price}$h3>
    10. div>
    11. <div className="quantity">
    12. <button onClick={() => decrementProduct()}>-button>
    13. <p>{item.inCart}p>
    14. <button onClick={() => incrementProduct()}>+button>
    15. div>
    16. <div className="itemDelete">
    17. <button onClick={() => removeItem(item.id)}><img src={require('../images/icons/trashCanIcon.png')} />button>
    18. div>
    19. div>
    20. div>
    21. ): <h1>Cart is emptyh1>}
    22. {cartProducts.length > 0 ? <h1 className="totalPrice">Total Price: {totalPrice}$h1> : <>}
  • )
  • 以及增加产品的功能

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

    解决思路一:

    您增加了所有产品的产品数量。你可以试试这段代码。

    1. case "INCREMENT_PRODUCT":
    2. return {
    3. ...state,
    4. cartProducts: state.cartProducts.map((item) => ({
    5. id: item.id,
    6. inCart: item.id === action.payload.id ? item.inCart + action.payload.increment : item.inCart
    7. }));

    解决思路二(这是解决小编问题的思路)

    以上仅为部分解决思路介绍,请查看全部内容,请添加下方公众号后回复001,即可查看。公众号有许多评分最高的编程书籍和其它实用工具,绝对好用,可以放心使用

    如果您觉得有帮助,可以关注公众号——定期发布有用的资讯和资源​

  • 相关阅读:
    Python+Appium+Pytest+Allure自动化测试框架-代码篇
    JMeter 逻辑控制之IF条件控制器
    【C++】多态 ④ ( 多态实现原理 | C++ 联编概念 | 链接属性 | 内部链接 | 外部链接 | 联编与链接 | 静态联编 | 动态联编 | 联编 与 virtual 关键字 )
    堪称一绝!阿里技术人都用的 Nginx 笔记手册,应用到架构齐全
    在 Python 中使用 Pillow 进行图像处理【2/4】
    TCP 中的 Delay ACK 和 Nagle 算法
    循环数组,一个可以释放无锁队列的力量
    【附源码】Python计算机毕业设计数字资源交流平台
    【Java分享客栈】未来迈向高级工程师绕不过的技能:JMeter压测
    【C语言】刷题笔记 Day1
  • 原文地址:https://blog.csdn.net/qq_38334677/article/details/126098405