DOM и React Senior Эффекты и жизненный цикл обновлено

Гонка асинхронных запросов

Условие

Хук useData(load, id) вызывает load(id) при смене id и кладёт результат в состояние. Если id сменился, пока запрос летит, старый ответ применяться не должен.

Что проверяют тесты

  • кладёт результат

  • медленный старый ответ не перетирает новый

Как подойти

Гонка запросов - самый частый баг реального фронта и любимый вопрос на собеседовании. Флаг canceled в замыкании эффекта: очистка помечает эффект неактуальным, и пришедший позже ответ отбрасывается. Промис при этом не отменяется - для настоящей отмены нужен AbortController и signal у fetch.

Подсказки: 2
  1. Очистка эффекта вызывается перед следующим запуском - используй это.
  2. Флаг в замыкании эффекта: после очистки результат применять нельзя.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.