DOM и React Senior Эффекты и жизненный цикл обновлено
Отмена запроса через AbortController
Условие
Компонент загружает данные через переданный load(id, signal). При смене id или размонтировании прошлый запрос должен отменяться сигналом, а ошибку AbortError нельзя показывать пользователю.
Что проверяют тесты
показывает данные
прошлый запрос отменяется сигналом
отмена не показывается как ошибка
Как подойти
Это сильная версия защиты от гонки: не просто игнорируем старый ответ, а прекращаем работу. Обязательный третий шаг - отфильтровать AbortError, иначе пользователь увидит «ошибку» при каждом быстром переключении. В связке с fetch: fetch(url, { signal }).
Подсказки: 3
- AbortController создаётся внутри эффекта, signal уходит в запрос.
- Очистка эффекта вызывает controller.abort().
- Отменённый запрос отклоняется ошибкой с именем AbortError - её надо отличать от настоящей.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.