Ты не должен вызывать setState() в componentWillUnmount() потому, что компонент находится в процессе удаления из DOM и никогда больше не будет смонтирован. После размонтирования экземпляр компонента уничтожается.
Вызов setState() во время размонтирования создаёт несколько критических проблем:
Если нужно выполнить операции очистки, используй componentWillUnmount() для:
clearTimeout() и clearInterval()componentWillUnmount() {
clearTimeout(this.timer);
this.subscription.unsubscribe();
window.removeEventListener('resize', this.handleResize);
}
Если ты используешь функциональные компоненты с React Hooks, верни функцию очистки из useEffect(). Она автоматически выполняется при размонтировании компонента:
useEffect(() => {
const timer = setTimeout(...);
return () => clearTimeout(timer);
}, []);
Функция очистки выполняет необходимые операции без попыток обновить состояние размонтированного компонента.
Вызов setState() в componentWillUnmount() приводит к утечкам памяти, потому что React обрабатывает поставленное в очередь обновление состояния, даже если экземпляр компонента уже уничтожен.
Новый — ещё не проверен сообществом
Вы