intermediate
Client-side fetching
Загружайте данные после render, обрабатывая abort, гонки, состояния загрузки и повторные попытки.
Клиентская загрузка начинается после mount — обычно в effects или обработчиках событий, либо через библиотеки, оборачивающие эти паттерны. Явно показывайте UI загрузки, ошибки и успеха. Прерывайте запросы при размонтировании или смене зависимостей через `AbortController`, чтобы избежать гонок.
Не загружайте данные в render. Дедуплицируйте параллельные запросы к одному ресурсу. Оцените, не уместнее ли server-state cache вместо state компонента.
useEffect(() => {
const ctrl = new AbortController();
fetch(url, { signal: ctrl.signal }).then(/* ... */);
return () => ctrl.abort();
}, [url]);
На интервью объясняйте концепцию на конкретном примере и называйте поведение, которое проверяют.
Типовые ошибки: скрывать поток данных, дробить компоненты чрезмерно и выполнять побочные эффекты в render.
Компромисс часто между ясностью и переиспользованием или между явными props и удобством.
Чеклист:
- Не вызывайте fetch прямо в render.
- Прерывайте устаревшие запросы.
- Моделируйте состояния загрузки и ошибки.