Вы изменяете текущий элемент. Увеличение / уменьшение до / после изменения приведет к изменению текущей ссылки на объект, с которой он работает.
case types.ADD_TO_CART_SUCCESS:
const isAdded = state.cart.find(item => item.sku === action.product.sku);
if (!isAdded) action.product.qty = 1;
return {
...state,
cart: !isAdded
? [action.product, ...state.cart]
: state.cart.map(item =>
item.sku === action.product.sku
? { ...item, qty: ++item.qty } // <-- This mutates the current item.qty
: item
),
};
Однако вы можете вернуть увеличенное значение, текущее item.qty + 1
case types.ADD_TO_CART_SUCCESS:
const isAdded = state.cart.find(item => item.sku === action.product.sku);
if (!isAdded) action.product.qty = 1;
return {
...state,
cart: !isAdded
? [action.product, ...state.cart]
: state.cart.map(item =>
item.sku === action.product.sku
? { ...item, qty: item.qty + 1 }
: item
),
};
Я подозреваю, что ваш код функции, как ожидалось, поскольку вы делаете правильно заменяете весь массив корзины, а элемент, который вы изменяете, является элементом, который вы хотите обновить в любом случае, но это указывает на то, что ваш редуктор может не быть чистой функцией, т.е. должен по-прежнему соответствовать предыдущему состоянию во всех аспектах после редуктор вычисляет следующее состояние.