TypeScript · 39 строк
Компонент корзины: меняет количество товаров, применяет промокод OZON300 (−300 ₽ от суммы больше 300 ₽) и оформляет заказ. Цены приходят в рублях с копейками. Отметьте строки с ошибками.
В работе: Корзина на сайте: последний шаг перед оплатой.
Как проверяем
Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Ответ один на подход: после него показываем разбор.
Источник: на задачах Ozon: корзина и промокоды. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
import { useState } from "react";type Item = { sku: string; title: string; price: number; qty: number };export function Cart({ initial }: { initial: Item[] }) {const [items, setItems] = useState(initial);const [promo, setPromo] = useState("");const changeQty = (sku: string, delta: number) => {const item = items.find((i) => i.sku === sku)!;item.qty += delta;setItems(items);};let total = 0;for (const i of items) total += i.price * i.qty;if (promo == "OZON300" && total > 300) total -= 300;return (<div>{items.map((i) => (<div key={i.sku}>{i.title}: {i.qty} шт.<button onClick={() => changeQty(i.sku, -1)}>−</button><button onClick={() => changeQty(i.sku, +1)}>+</button></div>))}<input value={promo} onChange={(e) => setPromo(e.target.value)} /><div>Итого: {total} ₽</div><buttononClick={() =>fetch("/api/checkout", { method: "POST", body: JSON.stringify({ items, total }) })}>Оформить</button></div>);}