# useWillUnmount
A hook that takes in a function to execute right before the component unmounts.
### Why? 💡
- takes care of performing a callback before the component unmounts
### Basic Usage:
```jsx harmony
import { Typography } from 'antd';
import useWillUnmount from 'beautiful-react-hooks/useWillUnmount';
const ComponentWillUnmount = () => {
useWillUnmount(() => {
console.log('Component will unmount');
});
return (
Check the javascript console after moving from this page
);
};
```
### Callback setter syntax:
If the first parameter is omitted, you can use the returned function (a callback setter) to set the useWillUnmount handler. However, you
must immediately invoke the callback setter.
Important: The callback setter only changes the value of the callback reference and does not trigger a component rerender. Also, avoid
invoking it asynchronously
```jsx harmony
import { Typography } from 'antd';
import useWillUnmount from 'beautiful-react-hooks/useWillUnmount';
const ComponentWillUnmount = () => {
const onUnmount = useWillUnmount();
onUnmount(() => {
console.log('Component will unmount');
});
return (
Check the javascript console after moving from this page
);
};
```
#### ✅ Pro tip:
When using a React function component you should not really think of it in terms of "lifecycle".
The `useWillUnmount` hook is indeed intended as a shortcut to `useLayoutEffect(() => () => willUnmount, [])`.
To deep understanding `useLayoutEffect`, what it is and how it should be properly used, please read
"[A complete guide to useLayoutEffect](https://react.dev/reference/react/useLayoutEffect)"
by React Team
### Mastering the hook
#### ✅ When to use
- When you need to perform a function before the component has mounted
#### 🛑 When not to use
- Avoid using this hook asynchronously since it would violate the [rules of hooks](https://reactjs.org/docs/hooks-rules.html)
- If you're using the callback setter, make sure to invoke it immediately instead of asynchronously
### Types
```typescript static
import { type GenericFunction } from './shared/types';
/**
* Returns a callback setter for a callback to be performed when the component will unmount.
*/
declare const useWillUnmount: (callback?: TCallback | undefined) => import("./shared/types").CallbackSetter;
export default useWillUnmount;
```