Корзина не обновляется на экране: состояние меняется на месте
Что не так. addItem добавляет товар в тот же массив и передаёт его в setItems. Ссылка не изменилась — React пропускает перерисовку. Товар появляется в корзине только после следующего несвязанного обновления.
function addItem(product: Product) {
items.push({ ...product, qty: 1 });
setItems(items);
}Как исправить. Всегда создавайте новый массив. Удобнее всего собрать действия в редьюсер:
export function cartReducer(items: CartItem[], action: CartAction): CartItem[] {
switch (action.type) {
case "add": {
const existing = items.find((item) => item.id === action.product.id);
return existing
? items.map((item) => (item.id === existing.id ? { ...item, qty: item.qty + 1 } : item))
: [...items, { ...action.product, qty: 1 }];
}
case "remove":
return items.filter((item) => item.id !== action.id);
}
}