#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», полезная нагрузка: книга}). и что далее переходит к вышеупомянутому коду