Вопрос проверяет понимание жизненного цикла эффектов, предотвращения утечек памяти и корректной работы с подписками.
Отписка выполняется через функцию очистки (cleanup), которую возвращает useEffect. Эта функция вызывается перед повторным выполнением эффекта и при размонтировании компонента. В cleanup обычно отменяют подписки, таймеры, слушатели событий и запросы. Без корректной отписки возможны утечки памяти и ошибки обновления состояния размонтированного компонента.
Cleanup-функция — это функция, возвращаемая из useEffect, которая используется для очистки побочных эффектов.
Перед следующим запуском эффекта (если изменились зависимости)
При размонтировании компонента
useEffect(() => {
const handler = () => console.log('resize');
window.addEventListener('resize', handler);
return () => {
window.removeEventListener('resize', handler);
};
}, []);
useEffect(() => {
const unsubscribe = store.subscribe(() => {
// обновление
});
return () => {
unsubscribe();
};
}, []);
Забыть вернуть cleanup-функцию
Использовать новые ссылки на функции при отписке
Обновлять state после размонтирования
Для запросов:
используют AbortController
либо флаг “isMounted” (менее предпочтительно)
useEffect(() => {
const controller = new AbortController();
fetch(url, { signal: controller.signal });
return () => controller.abort();
}, [url]);
Любой эффект, который что-то подписывает или запускает, должен симметрично очищаться. Cleanup — обязательная часть корректного useEffect.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию