Вопрос:

Вы фронтенд-разработчик в команде, которая внедряет страницу профиля в SPA на React + TypeScript. Требования заказчика (см. ниже): - страница доступна по маршруту /users/:id (React Router v6); - данные профиля подтягиваются с GET /api/users/:id; - при смене :id происходит повторная загрузка; - предыдущий запрос корректно отменяется при размонтировании/смене :id; - для авторизации в заголовок уходит токен из localStorage; - без глобального состояния, только локальный useState; - корректная типизация ответа; - отображать «Загрузка...» во время запроса и имя пользователя после. Какой из фрагментов компонента реализует требования наилучшим образом?

Смотреть решения всех заданий с листа

Ответ:

Разбор кода:

Чтобы выбрать лучший вариант, давай разберем каждый пункт требований и посмотрим, как он реализован в представленном коде:

  1. Маршрут /users/:id: Этот пункт связан с React Router v6 и используется для получения id пользователя. В коде это реализовано с помощью useParams(), что соответствует требованию.
  2. GET запрос /api/users/:id: Данные подтягиваются с помощью fetch, используя полученный id. Это соответствует требованию.
  3. Повторная загрузка при смене :id: Эффект useEffect запускается при монтировании и обновлении компонента. Если id изменится, useEffect должен снова выполнить fetch.
  4. Отмена предыдущего запроса: Требование об отмене запроса при размонтировании или смене id не реализовано в представленном коде. Для этого нужно использовать AbortController.
  5. Токен из localStorage: Токен передается в заголовке Authorization, что соответствует требованию.
  6. Локальный useState: Состояние пользователя хранится локально с помощью useState, что соответствует требованию.
  7. Типизация ответа: Типизация ответа отсутствует в представленном фрагменте кода (useState<any>(null)).
  8. Отображение «Загрузка...»: Пока user равен null (т.е. данные еще не загружены), отображается «Загрузка...». После загрузки отображается имя пользователя. Это соответствует требованию.

Проблема кода:

  • Не отменяется запрос: Комментарий //← не реагирует на смену id, нет отм явно указывает на проблему с отменой запроса.
  • Отсутствие типизации: useState<any>(null) не обеспечивает корректную типизацию.

Вывод:

Хотя код пытается реализовать большинство требований, он не справляется с отменой предыдущего запроса при смене id. Это критический недостаток, так как при быстрой смене id могут возникать гонки запросов и некорректное отображение данных.

Примечание: Если бы был предложен вариант с использованием AbortController для отмены запросов и корректной типизацией, он был бы лучшим. В данном случае, представленный фрагмент кода имеет существенные недостатки.

Ответ: Ни один из предложенных вариантов не реализует все требования наилучшим образом из-за отсутствия отмены запроса и корректной типизации.

ГДЗ по фото 📸
Подать жалобу Правообладателю