Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 反应本地添加到购物车数量和总价问题_Javascript_Reactjs_React Native_Redux_React Redux - Fatal编程技术网

Javascript 反应本地添加到购物车数量和总价问题

Javascript 反应本地添加到购物车数量和总价问题,javascript,reactjs,react-native,redux,react-redux,Javascript,Reactjs,React Native,Redux,React Redux,面临一个问题,即我的购物车在2个数量之后没有正确更新数量和总价 在按下按钮的“添加到购物车”过程中使用redux操作,我将向quantity对象分配一个新元素:1 export function addToCart(card){ return (dispatch) => { card.quantity = 1; dispatch({type: ADD_TO_CART, data:card}); console.log(card);

面临一个问题,即我的购物车在2个数量之后没有正确更新数量和总价

在按下按钮的“添加到购物车”过程中使用redux操作,我将向quantity对象分配一个新元素: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检测)中存在重复的项目,则不会将其合并到主状态数组中,而是更新状态中现有项目的数量
  • 否则将对阵列进行加密

  • 最后,将计算处于状态的整个项目的总价,并将其传递回我的购物车,以显示基于数量*价格的总价


问题是,目前,我的代码只显示到2x,当第三次添加相同的项目时,数量将保持在2x,并且价格计算不正确。

您应该更改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()进行变异=======


在第二次添加相同的项目后,我得到了NaN的数量和价格。请尝试使用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 };