У меня есть состояние объектов в массиве (в моем Redux Reducer).
const initialState = {
items: [
{ id: 1, dish: "General Chicken", price: 12.1, quantity: 0 },
{ id: 2, dish: "Chicken & Broccoli", price: 10.76, quantity: 0 },
{ id: 3, dish: "Mandaran Combination", price: 15.25, quantity: 0 },
{ id: 4, dish: "Szechuan Chicken", price: 9.5, quantity: 0 }
],
addedItems: [],
total: 0
};
У меня есть действие, чтобы добавить 1 к количеству объекта, например, {id: 1, di sh: Цыпленок генералов, цена: 10,76, количество: 0} при нажатии кнопки в Cart.jsx. Вот первый редуктор, который я попытался использовать с помощью оператора спреда:
case "ADD_QUANTITY":
let existing_item = state.addedItems.find(
item => action.payload === item.id
);
return {
...state,
addedItems: [
...state.addedItems,
{ ...existing_item, quantity: existing_item.quantity + 1 }
]
};
Это не сработало, вместо добавления 1 к количеству добавился еще один объект с количеством, установленным в 2.. Итак, я попытался использовать карту, как это
case "ADD_QUANTITY":
return {
...state,
addedItems: state.addedItems.map(item =>
item.id === action.payload
? { ...item, quantity: item.quantity + 1 }
: item
)
};
И это работало правильно. Мой вопрос: почему не работает оператор спреда? Насколько я могу судить, он должен делать то же самое, что и карта?