Как правильно обновить глобальное состояние?

#reactjs #react-redux

#reactjs #react-redux

Вопрос:

Я работаю над приложением типа электронной коммерции. Я реализовывал функциональность корзины, но застрял и, похоже, не могу найти способ.

В принципе, у меня есть глобальное состояние под названием cart. который выглядит так:

 cart: [
        {
          book: {},
          quantity: 1
        }
     ]
 

Я хочу обновить количество, когда в нем найдена книга.

 case "ADD_TO_CART":
  let book_index = state.cart.findIndex(
    (el) => el.book._id === action.payload._id
  );
  let newCart;
  if (book_index === -1){
    newCart = state.cart.concat({book: action.payload, quantity: 1})
  } else {
     newCart = [...state.cart];
     newCart[book_index].quantity = newCart[book_index].quantity   1; 
  }
  return {
    ...state,
    cart: newCart,
  };
 

Проблема в том, что когда книга найдена, она обновляет количество в 2 раза. Таким образом, количество идет как 1, 3, 5, 7 и так далее.
Я попытался заменить 1 на 0,5, чтобы посмотреть, удваивает ли он его, а это не так.

Комментарии:

1. Потому что ваш newCart[book_index].quantity уже увеличен на единицу, и после этого вы вручную делаете 1 в этом. Таким образом, вы не получаете правильное количество книг. Лучше, если вы поделитесь с ним большим количеством кода.

2. Это почти вся логика, но я все равно объясню всю структуру. У меня есть компонент с именем ‘Card’. когда я нажимаю «Добавить в корзину», он вызывает функцию (из глобального состояния с использованием контекстного api) и предоставляет в ней книгу. Функция в состоянии выглядит следующим образом. отправка ({тип: «ADD_TO_CART», полезная нагрузка: книга}). и что далее переходит к вышеупомянутому коду