0.0.7 • Published 4 years ago
use-delayed-render v0.0.7
useDelayedRender 
useDelayedRender is a react hook for delaying the render and unmount of a component. This is commonly used to animate UI on unmount.
Installation
$ yarn add use-delayed-renderUsage
Function signature:
const { mounted: boolean, rendered: boolean } = useDelayedRender(
active: boolean,
options?: {
enterDelay: number,
exitDelay: number,
onUnmount: () => void
}
)Options:
active: Whether your component is in an active stateenterDelay: After mounting, the delay beforerenderedbecomes trueexitDelay: Afterrenderedbecomes false, the delay before unmountingonUnmount: A callback triggered after unmounting
Return values:
mounted: Whether your component should be mounted in the DOMrendered: Whether your component should be visible
Example
Render a modal, but delay the unmount so that our 2 second CSS transition completes before the modal is removed from the DOM.
const Modal = ({ active }) => {
const { mounted, rendered } = useDelayedRender(active, {
exitDelay: 2000,
})
if (!mounted) return null
return (
<Portal>
<div className={rendered ? 'modal visible' : 'modal'}>{/* ... */}</div>
</Portal>
)
}This allows you to use simple CSS transitions to animate the mounting/unmounting of your component.
.modal {
opacity: 0;
transition: opacity 2s ease;
}
.modal.visible {
opacity: 1;
}Why?
- Usually you would use
react-transition-groupto solve this, but the 2.37MB install size is a bit overkill, compared to this package at 491B gzipped.
<Transition in={active} unmountOnExit timeout={200} onExited={handleExit}>
<Modal />
</Transition>- Hooks solve the problem without needing a render function or HOC.