Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про React: useeffect, cleanup

Как корректно отписываться от подписок в useEffect

Вопрос проверяет понимание жизненного цикла эффектов, предотвращения утечек памяти и корректной работы с подписками.

Короткий ответ

Отписка выполняется через функцию очистки (cleanup), которую возвращает useEffect. Эта функция вызывается перед повторным выполнением эффекта и при размонтировании компонента. В cleanup обычно отменяют подписки, таймеры, слушатели событий и запросы. Без корректной отписки возможны утечки памяти и ошибки обновления состояния размонтированного компонента.

Длинный ответ

Определение

Cleanup-функция — это функция, возвращаемая из useEffect, которая используется для очистки побочных эффектов.

Когда вызывается cleanup

  1. Перед следующим запуском эффекта (если изменились зависимости)

  2. При размонтировании компонента

Базовый пример с подпиской

useEffect(() => {
  const handler = () => console.log('resize');

  window.addEventListener('resize', handler);

  return () => {
    window.removeEventListener('resize', handler);
  };
}, []);

Подписки на внешние источники

useEffect(() => {
  const unsubscribe = store.subscribe(() => {
    // обновление
  });

  return () => {
    unsubscribe();
  };
}, []);

Частые ошибки

  1. Забыть вернуть cleanup-функцию

  2. Использовать новые ссылки на функции при отписке

  3. Обновлять state после размонтирования

Асинхронные эффекты

Для запросов:

  1. используют AbortController

  2. либо флаг “isMounted” (менее предпочтительно)

useEffect(() => {
  const controller = new AbortController();

  fetch(url, { signal: controller.signal });

  return () => controller.abort();
}, [url]);

Вывод

Любой эффект, который что-то подписывает или запускает, должен симметрично очищаться. Cleanup — обязательная часть корректного useEffect.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    5

  • Сложность:

    7

Навыки

  • React

    React

Ключевые слова

#useeffect

#cleanup

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию