Итак, я создаю приложение для электронной коммерции, и у меня есть два значения, сохраненные в избыточном состоянии для обработки корзины. Один из них представляет собой массив объектов, каждый из которых содержит два ключа для objectID и количества. Другой - это объект, содержащий информацию о продукте с идентификатором объекта в качестве ключа. Вот код моего действия / отправки.
addToCart: (product) => {
return (dispatch, getState) => {
const {productQuantity, storeSelected, products, storeKeys} = getState().Ecommerce;
const UPC = product.UPC;
let newQuant = 1;
let newProducts;
for(var p in productQuantity) {
if (productQuantity[p].UPC === UPC) {
newProducts = products
newQuant += productQuantity[p].quantity;
productQuantity[p] = ({UPC, quantity: newQuant});
}
}
if (!newProducts) {
console.log("not found")
productQuantity.push({UPC, quantity: 1});
newProducts = {
...products,
[UPC]: {
...product,
price: product.stores[storeKeys[storeSelected]].price,
fromStore: storeKeys[storeSelected],
}
}
}
dispatch({
type: actions.CHANGE_CART,
products: newProducts,
productQuantity
});
};
},
Действие определенно выполняется. Следующим будет мой редуктор.
case actions.CHANGE_CART:
console.log('This runs')
console.log(action.products);
console.log(action.productQuantity);
return {
...state,
products: action.products,
productQuantity: action.productQuantity
};
Он также выполняется, и действительно, при проверке состояния productQuantity обновляется в состоянии, а products - нет. Я попробовал каждую конфигурацию определений на этом этапе и рву свои волосы. Помощь будет принята с благодарностью.
Что я могу подтвердить:
- Правильные данные отправляются в редуктор.
- Редуктор выполняется.
- ProductQuantity корректно обновляется редуктором и имеет правильное значение.