Встречается на собеседованиях • сегодня

Как решить проблему утечек памяти в useEffect

При утечках памяти в useEffect важно отменять подписки, таймеры и асинхронные операции при размонтировании компонента.

Пример с подпиской:

jsx
useEffect(() => {
  const subscription = someObservable.subscribe(handleData);
  return () => subscription.unsubscribe(); // Очистка
}, []);

Пример с fetch:

jsx
useEffect(() => {
  let isMounted = true;
  fetchData().then(data => {
    if (isMounted) setData(data);
  });
  return () => { isMounted = false; }; // Отмена обновления
}, []);

Что делать:

  1. Всегда возвращайте функцию очистки, если эффект создаёт подписки, таймеры (setInterval/setTimeout) или запросы.
  2. Для асинхронных операций используйте флаги (isMounted) или AbortController.
  3. Избегайте сохранения данных в глобальные переменные или объекты вне компонента.

Ошибка:

jsx
useEffect(() => {
  setTimeout(() => setState(1), 1000); // Таймер не очищен!
}, []);
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы