我正在使用react-redux构建购物车。我希望能够在添加金额(初始1件)之后将产品添加到购物车。并且,如果用户希望,它可以更新该金额(更高或更低)。
目前,我仍然遇到相同的问题,添加了一种产品,但用户无法再对其进行更新。
调度代码
function addToCart() {
console.log(oneBox);
dispatch(addCart(oneBox));
}
然后是动作代码:
export const addCart = (oneBox) => {
return async (dispatch, getState) => {
dispatch(appLoading());
const curCart = getState().cart;
console.log(curCart);
let productCart = { ...oneBox };
productCart = { ...productCart, amount: 1 };
if (!curCart.cart) {
dispatch(addCartSuccess([productCart]));
} else {
if (parseInt(curCart.cart.map((cart) => cart.id)) === oneBox.id) {
dispatch(updateCartSuccess(oneBox));
} else {
dispatch(addCartSuccess([productCart]));
}
}
dispatch(appDoneLoading());
};
}:
然后是减速器代码:
export default (state = initialState, { type, payload }) => {
switch (type) {
case ADD_CART_SUCCESS:
return { ...state.cart, ...payload };
case UPDATE_CART_SUCCESS:
console.log(payload);
return {
...state,
cart: state.cart.map((cart) => {
if (cart.id === payload.id) {
return {
...cart,
amount: payload.amount + 1,
};
}
return cart;
}),
};
它需要做的是首先检查发送的产品ID(oneBox)是否已经在购物车中,如果没有,则将产品添加到购物车中(工作正常)。如果产品已经在购物车中,请更新数量(无效)。
有人可以在这里看到我在做什么吗?
ps。忍受我是初级开发人员。我不知道基于类的react或mapStateToProps。
我认为将cart与oneBox进行比较时,这行有问题,因为调用parseInt
数组只会解析第一个元素。我假设您要检查购物车中的item.id之一是否与oneBox.id相匹配。这是做到这一点的一种方法
if (curCart.cart.filter((cart) => cart.id === oneBox.id).length) {
dispatch(updateCartSuccess(oneBox));
}
上面的代码过滤与oneBox.id ..相匹配的购物车。如果未找到任何内容,则将生成长度为0(虚假)的空数组。如果找到,则该数组将大于0(最有可能为1,这是事实)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句