В этом задании мы создадим функциональную корзину интернет-магазина с добавлением товаров, изменением количества и подсчётом итога.
Корзина покупок - это ключевой элемент любого интернет-магазина. Пользователь добавляет товары, изменяет их количество, видит общую стоимость и может оформить заказ.
В корзине мы храним не просто товары, а товары с количеством. Каждый элемент корзины - это объект товара плюс поле quantity:
Проверка наличия товара - используем find для поиска по id:
const existingItem = cart.find(item=> item.id=== productId);if(existingItem){// Товар уже в корзине - увеличиваем количество}else{// Товар новый - добавляем с quantity: 1}
Метод find возвращает первый элемент, для которого функция вернула true, или undefined если ничего не найдено.
Обновление количества с map - создаём новый массив, изменяя нужный элемент:
Вычисление суммы с reduce - самый мощный метод массивов для агрегации:
const total = cart.reduce((sum, item)=> sum + item.price* item.quantity,0);
reduce принимает функцию и начальное значение (0). Функция получает аккумулятор (sum) и текущий элемент (item), возвращает новое значение аккумулятора.
Задание
Необходимо создать корзину покупок с полным функционалом. Создайте состояние cart (массив товаров, каждый элемент содержит все поля товара плюс quantity). Реализуйте addToCart(product): проверьте методом find, есть ли товар в корзине по id. Если есть - увеличьте его quantity с помощью map, если нет - добавьте товар с quantity: 1 через spread оператор. Функция incrementQuantity(productId) увеличивает количество товара с данным id. Функция decrementQuantity(productId) уменьшает количество (минимум 1). Функция removeFromCart(productId) удаляет товар методом filter. Вычислите с помощью reduce: totalItems (сумма всех quantity), subtotal (сумма price × quantity для всех товаров). Вычислите shipping (500₽ если корзина не пустая, иначе 0) и total (subtotal + shipping). Отобразите список товаров с кнопкой добавления в корзину. В секции корзины покажите добавленные товары с кнопками изменения количества, удаления и итоговую информацию. Если корзина пустая, покажите сообщение "Корзина пуста".
functionShoppingCart(){//...constaddToCart=(product)=>{//...};constincrementQuantity=(productId)=>{//...};constremoveFromCart=(productId)=>{//...};return(<divclassName="shop-container"><divclassName="products-section">{PRODUCTS.map(product=>(<divkey={product.id}className="product-card">{/*...*/}<buttononClick={()=>addToCart(product)}> В корзину
</button></div>))}</div><divclassName="cart-section">{/*...*/}</div></div>);}