Skip to main content

cleanup у useEffect

Що робить функція очищення (cleanup) в useEffect

Функція очищення - це функція, яку ти повертаєш з useEffect. React викликає її, коли потрібно "очистити" наслідки попереднього ефекту: відписатися, зупинити таймер, скасувати запит, видалити обробник тощо.


Синтаксис

javascript
useEffect(() => { // побічний ефект console.log("Ефект запущено"); return () => { // cleanup - функція очищення console.log("Ефект очищено"); }; }, []);

Коли викликається cleanup

СитуаціяКоли викликається cleanup
Компонент демонтуєтьсяПеред видаленням компонента з екрана
Ефект перезапускається (при зміні залежностей)Перед виконанням нового ефекту
Ефект ніколи не викликавсяCleanup теж не викликається

Простіше кажучи:

React робить так:

  1. Виконати ефект
  2. Якщо залежності змінилися:
  • викликати cleanup старого ефекту,
  • потім викликати новий ефект

Приклад 1 - підписка на подію

javascript
useEffect(() => { function handleResize() { console.log(window.innerWidth); } window.addEventListener("resize", handleResize); console.log("Підписку встановлено"); // Очищення: відписуємося, коли компонент видаляється return () => { window.removeEventListener("resize", handleResize); console.log("Підписку видалено"); }; }, []); // тільки при монтуванні

Що відбудеться:

  • При монтуванні: додасться слухач подій.
  • При демонтуванні: видалиться слухач (cleanup).

Приклад 2 - ефект із залежністю

javascript
useEffect(() => { const timer = setInterval(() => console.log("tick"), 1000); return () => { clearInterval(timer); // очищаємо старий інтервал }; }, [count]);

Тут при кожній зміні count:

  1. React викликає cleanup -> clearInterval(timer)
  2. Потім запускає новий setInterval

Це запобігає "накопиченню" кількох таймерів одночасно.


Навіщо потрібен cleanup

Запобігає витокам пам'яті (наприклад, незакритим підпискам, таймерам). Уникає дублювання ефектів при оновленні залежностей. Забезпечує коректне "життя" компонента (монтування -> оновлення -> демонтування).


Підсумок

ПитанняВідповідь
Що робить cleanupОчищає наслідки ефекту (відписки, таймери, запити тощо)
Коли викликаєтьсяПеред повторним виконанням ефекту і при демонтуванні компонента
Навіщо потрібенЩоб уникнути витоків пам'яті та дублюючих побічних ефектів

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.