当前位置: 首页 > 知识库问答 >
问题:

对原车数量和总价问题作出反应

朱修真
2023-03-14

面对一个问题,我的推车没有更新的数量和总价正确后2个数量。

在按下按钮的ADD_TO_CART过程中使用redux操作,我将为数量为1的对象分配一个新元素

export function addToCart(card){
    return (dispatch) => {
        card.quantity = 1;
        dispatch({type: ADD_TO_CART, data:card});
        console.log(card);
    };
}

在我的减速器上,下面是功能

let cartState = { data: [], totalPrice: 0 };
const cartReducer = (state = cartState, action) => {
            switch (action.type) {
                case ADD_TO_CART:
                let totalPriceCart = 0;
                let checkforDuplicate = state.data.some(function (a){
                    if(a.sno === action.data.sno){
                        return true;
                    }
                });

                if(checkforDuplicate){
                    for (let i in state.data) {
                        if (state.data[i].sno === action.data.sno) {
                            state.data[i].quantity = action.data.quantity+1;
                            break;
                        }
                    }
                    for(let e in state.data){
                        totalPriceCart = totalPriceCart + (state.data[e].price*state.data[e].quantity);
                    }
                    return  {data: state.data, totalPrice: totalPriceCart };
                }

                let cloneArr = state.data.concat(action.data);
                for(let i in cloneArr){
                    totalPriceCart = totalPriceCart+(cloneArr[i].price*cloneArr[i].quantity);
                }

                return {...state, data : cloneArr, totalPrice: totalPriceCart }
                default:
                return state;
            }
        };

我在减速器里做的是,

>

  • 如果添加到购物车操作对象中有重复的项目(由sno检测),将不连接到主状态数组中,而是更新状态中现有项目的数量
  • 否则将连接数组

    在结束时,将统计整个项目的总价在状态下,并将它返回到我的推车,以显示基于数量*价格的总价

    问题是,目前,我的代码只显示到2倍,当添加同一项目第3次,数量将停留在2倍,价格计算不正确。

  • 共有1个答案

    舒赞
    2023-03-14

    您应该更改state.data的数量

    if (checkforDuplicate) {
    
        for (let i in state.data) {
            if (state.data[i].sno === action.data.sno) {
                state.data[i].quantity = state.data.quantity + 1;
                break;
            }
        }
        for (let e in state.data) {
            totalPriceCart = totalPriceCart + (state.data[e].price * state.data[e].quantity);
        }
        return { data: state.data, totalPrice: totalPriceCart };
    }
    

    使用=====array.map()========进行突变

        let mutatedArr = state.data.map((item)=> {
            if (item.sno === action.data.sno) {
                item.quantity += 1;
            }
           return item;
        });
    let totalPriceCart = 0;
     mutatedArr.forEach((item)=>{
    totalPriceCart+ =  (item.price * item.quantity)
        })
        return { data: mutatedArr, totalPrice: totalPriceCart };
    
     类似资料:
    • 我是一名Android应用程序开发人员,从上一个月开始研究 React 原生。我有问题,对于那些我无法找到解决方案的人: > 确实反应原生使用而不是来表示字体大小,并且如果我们想使用dp来表示字体大小怎么办。 我想为布局提供、和 维度,如何做到这一点? 如何为7英寸平板电脑、10英寸平板电脑和手机提供单独的尺寸?出于某种目的,我想为react-native实现isDeviceTablet()方法,

    • 本文向大家介绍jQuery实现购物车多物品数量的加减+总价计算,包括了jQuery实现购物车多物品数量的加减+总价计算的使用技巧和注意事项,需要的朋友参考一下

    • 我正在做一个拉拉维尔购物网站项目,我对购物车中的产品数量有问题。我对拉雷维尔比较陌生,所以事情对我来说变得更复杂。。。问题是我不能真正有效地循环(并寻找)simular产品。 但是当我按下“添加到购物车”按钮时,这个功能会运行: 产品是对象,我不确定如何循环查找产品的id以匹配数组-产品id。我尝试json_decode()看看这是否会使其成为一个数组,但我在这里可能是错误的,因为当我返回值时,它

    • 本文向大家介绍关于使用js算总价的问题,包括了关于使用js算总价的问题的使用技巧和注意事项,需要的朋友参考一下 昨天对接数据,发现有个商品总价需要计算,商品数量不定,商品价格不定,商品种类不定,有点蒙,想来想去想找到点简单的写法也没想到,最后提供一种简单的思路吧。 商品数量,商品价格先建立两个数组; 之后在新建一个数组放单个商品总价的数组; 之后获取到所有的商品数量,商品价格放入数组,两个数组进行

    • 本文向大家介绍原生JS和jQuery操作DOM对比总结,包括了原生JS和jQuery操作DOM对比总结的使用技巧和注意事项,需要的朋友参考一下 一、创建元素节点 1.1 原生JS创建元素节点 1.2 jQuery创建元素节点 二、创建并添加文本节点 2.1 原生JS创建文本节点 通常创建文本节点和创建元素节点配合使用,比如: 2.2 jQuery创建并添加文本节点: 三、复制节点 3.1 原生JS

    • 当我将移动主题从浅色改为深色时,它会影响react原生应用程序的背景颜色。我只想让它始终保持白色,但当我改变我的移动主题从光明到黑暗时,它会变成白色到黑色。Android版本10 React原生版本0.61.5 React版本16.9.0