← Назад к вопросам
В чем разница между очисткой и размонтированием?
2.0 Middle🔥 171 комментариев
#Архитектура и паттерны
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Разница между очисткой и размонтированием компонента
Это два важных но разных процесса в жизненном цикле React компонента. Часто они путаются, но выполняют разные функции.
Что такое очистка (cleanup/cleanup function)?
Очистка — это функция, которая вызывается перед тем, как эффект запустится заново или перед размонтированием компонента. Она нужна для того, чтобы удалить побочные эффекты, которые создал эффект.
Очистка используется в useEffect через return функцию:
function ChatComponent() {
useEffect(() => {
const handleNewMessage = (msg) => {
console.log("Новое сообщение:", msg);
};
window.addEventListener("message", handleNewMessage);
return () => {
window.removeEventListener("message", handleNewMessage);
};
}, []);
return <div>Чат</div>;
}
Что такое размонтирование (unmount)?
Размонтирование — это когда компонент полностью удаляется из DOM. Это происходит, когда родитель перестал его рендерить, произошла навигация или элемент был условно скрыт.
function App() {
const [showChat, setShowChat] = useState(true);
return (
<div>
{showChat && <ChatComponent />}
<button onClick={() => setShowChat(false)}>
Закрыть чат
</button>
</div>
);
}
Основные отличия
| Характеристика | Очистка | Размонтирование |
|---|---|---|
| Что это? | Функция, убирающая побочные эффекты | Процесс удаления компонента из DOM |
| Когда вызывается? | Перед повторным эффектом или размонтированием | Один раз, когда компонент удаляется |
| Почему нужна? | Чтобы избежать утечек памяти | Завершение жизненного цикла |
Практические примеры
Пример 1: Таймер
function Timer() {
const [seconds, setSeconds] = useState(0);
useEffect(() => {
const interval = setInterval(() => {
setSeconds(s => s + 1);
}, 1000);
return () => {
clearInterval(interval);
};
}, []);
return <div>Прошло: {seconds}с</div>;
}
Пример 2: Подписка на WebSocket
function Chat() {
const [messages, setMessages] = useState([]);
useEffect(() => {
const ws = new WebSocket("wss://chat.example.com");
ws.onmessage = (event) => {
setMessages(prev => [...prev, event.data]);
};
return () => {
ws.close();
};
}, []);
return <div>{messages.map((msg, i) => <p key={i}>{msg}</p>)}</div>;
}
Главное правило
Очистка — часть useEffect, которая убирает побочные эффекты. Размонтирование — процесс удаления компонента из DOM, при котором вызывается функция очистки.