intermediate
useEffect
Синхронизируйтесь с внешними системами, управляя dependencies, cleanup и повторными запусками в Strict Mode.
Effects выполняются после отрисовки, чтобы синхронизировать React с внешними системами: подписками, таймерами, ручными DOM API или логированием. Это не место для вычисления производных данных, которые должны жить в render. Массив зависимостей задаёт, когда effect перезапускается; без него он срабатывает после каждого render.
Возвращайте функцию очистки, чтобы отписаться, сбросить таймеры или прервать запросы. В Strict Mode в разработке effect монтируется, очищается и монтируется снова, выявляя отсутствие cleanup. Асинхронная работа внутри effect должна обрабатывать гонки через abort или игнорирование устаревших ответов.
useEffect(() => {
const id = setInterval(tick, 1000);
return () => clearInterval(id);
}, [tick]);
На интервью объясняйте концепцию на конкретном примере и называйте поведение, которое проверяют.
Типовые ошибки: скрывать поток данных, дробить компоненты чрезмерно и выполнять побочные эффекты в render.
Компромисс часто между ясностью и переиспользованием или между явными props и удобством.
Чеклист:
- Effects синхронизируют внешний мир, а не чистые вычисления.
- Перечисляйте все реактивные значения в зависимостях.
- Всегда очищайте подписки и таймеры.