useUnmount
Описание
useUnmount — хук, который выполняет переданную функцию один раз при размонтировании компонента.
- При маунте хук ничего не делает.
- При анмаунте вызывает актуальный колбэк (через
useLiveRef) — это гарантирует, что сработает последняя версия функции.
Сигнатура
ts
function useUnmount(callback: UseUnmountCallback): void;Параметры
callback— функция, вызываемая при размонтировании компонента.
Возвращает:
void.
Примеры
1) Отписка от событий
tsx
import { useEffect } from 'react';
import { useUnmount } from '@webeach/react-hooks';
export function Chat() {
useEffect(() => {
window.addEventListener('focus', onFocus);
return () => window.removeEventListener('focus', onFocus);
}, []);
useUnmount(() => {
window.removeEventListener('focus', onFocus);
});
return null;
}2) Очистка таймера/интервала
tsx
import { useUnmount } from '@webeach/react-hooks';
export function Ticker() {
useEffect(() => {
const id = setInterval(tick, 1000);
return () => clearInterval(id);
}, []);
useUnmount(() => {
// запасная очистка, если понадобится
clearIntervalAllSomehow?.();
});
return null;
}3) Сохранение черновика/логирование
tsx
import { useUnmount } from '@webeach/react-hooks';
export function Editor() {
useUnmount(() => {
saveDraft();
console.log('Editor unmounted');
});
return <textarea />;
}Поведение
- Размонтирование
- Колбэк выполняется один раз при анмаунте компонента.
- Актуальность колбэка
- Используется
useLiveRef, поэтому при анмаунте вызывается последняя версияcallback, даже если он менялся между рендерами.
- SSR‑безопасность
- Эффект выполняется только в браузере. На сервере побочные эффекты не запускаются.
Когда использовать
- Освобождение ресурсов: таймеры, подписки, контроллеры, веб‑сокеты.
- Сохранение состояния или аналитика при уходе со страницы/раздела.
- Атомарная финализация действий, начатых в компоненте.
Когда не использовать
- Если очистку можно вернуть из того же
useEffect, где ресурс создаётся — предпочтительнее сделать это вreturnколбэке эффекта. - Для логики, которая должна срабатывать на каждом обновлении — используйте
useEffectс зависимостями.
Типизация
Экспортируемые типы
UseUnmountCallback- Колбэк, вызываемый при размонтировании компонента:
() => any.
- Колбэк, вызываемый при размонтировании компонента: