Этот вопрос проверяет понимание жизненного цикла компонентов в React и умение заменять методы жизненного цикла классовых компонентов на хуки в функциональных.
В классовых компонентах React метод componentWillUnmount используется для очистки ресурсов перед удалением компонента из DOM. В функциональных компонентах, использующих хуки, эта логика реализуется с помощью хука useEffect.
Хук useEffect принимает два аргумента: функцию-эффект и необязательный массив зависимостей. Если функция-эффект возвращает другую функцию, то возвращённая функция выполняется React для очистки. Эта очистка происходит в двух случаях: непосредственно перед следующим выполнением того же эффекта (если зависимости изменились) и при размонтировании компонента.
Рассмотрим компонент, который подписывается на внешнее событие, например, на изменение размера окна. При размонтировании подписку необходимо удалить, чтобы избежать утечек памяти.
import React, { useState, useEffect } from 'react';
function WindowSizeTracker() {
const [windowWidth, setWindowWidth] = useState(window.innerWidth);
useEffect(() => {
// Эффект: подписываемся на событие
const handleResize = () => setWindowWidth(window.innerWidth);
window.addEventListener('resize', handleResize);
// Функция очистки: аналог componentWillUnmount
return () => {
window.removeEventListener('resize', handleResize);
console.log('EventListener удалён, компонент размонтируется.');
};
}, []); // Пустой массив зависимостей = эффект выполнится только при монтировании
return Ширина окна: {windowWidth}px;
}
[]) гарантирует, что эффект (и очистка) выполнится только один раз при монтировании/размонтировании.Вывод: Используйте возвращаемую функцию из useEffect для любой логики очистки (отмена сетевых запросов, таймеров, подписок). Это основной и единственный способ имитировать componentWillUnmount в функциональных компонентах React.