Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.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 为什么cart React Redux不';不更新?_Javascript_Reactjs_Redux_React Redux - Fatal编程技术网

Javascript 为什么cart React Redux不';不更新?

Javascript 为什么cart React Redux不';不更新?,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我正在用react redux构建一个购物车。我想能够添加一个产品到购物车后,添加金额(初始1件)。如果用户需要,它可以更新该数量(更高或更低) 在这一刻,我不断得到相同的问题,一个产品被添加,但用户无法更新它了 调度代码 function addToCart() { console.log(oneBox); dispatch(addCart(oneBox)); } 然后是操作代码: export const addCart = (oneBox) => {

我正在用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;
        }),
      };
它需要做的是首先检查发送的productid(oneBox)是否已经在购物车中,如果没有,则将产品添加到购物车中(工作正常)。如果产品已经在购物车中,只需更新金额(不起作用)

有人知道我做错了什么吗


请耐心听我说,我是一名初级开发人员。我不知道如何使用基于类的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(falsy)的空数组。如果找到,数组将大于0(很可能是1,这是真实的)

请提供一个工作片段,如果您有一个片段可以清楚地显示您的问题,它将比没有片段更快地解决您的问题,例如,您可以从代码沙盒创建一个片段