@mindblowing/resize-observer
v1.2.8
Published
A React hook that fires a callback whenever ResizeObserver detects a change to its size
Downloads
251
Maintainers
Readme
A React hook that fires a callback whenever ResizeObserver detects a change to its size.
Features
- [x] Uses a single
ResizeObserver
for tracking all elements used by the hooks. This approach is astoundingly more performant than using aResizeObserver
per element which most hook implementations do. - [x] Uses
@juggle/resize-observer
as a ponyfill whenResizeObserver
isn't supported by the current browser. - [x] Automatically unobserves the target element when the hook unmounts.
- [x] You don't have to wrap your callback in
useCallback()
because any mutations are handled by the hook.
Quick Start
Check out an example on CodeSandbox
import * as React from 'react'
import useResizeObserver from '@react-hook/resize-observer'
const useSize = (target) => {
const [size, setSize] = React.useState()
React.useLayoutEffect(() => {
setSize(target.current.getBoundingClientRect())
}, [target])
// Where the magic happens
useResizeObserver(target, (entry) => setSize(entry.contentRect))
return size
}
const App = () => {
const target = React.useRef(null)
const size = useSize(target)
return (
<pre ref={target}>
{JSON.stringify({width: size.width, height: size.height}, null, 2)}
</pre>
)
}
API
useResizeObserver(target, callback)
function useResizeObserver<T extends HTMLElement>(
target: React.RefObject<T> | T | null,
callback: UseResizeObserverCallback,
options?: ResizeObserverOptions
): ResizeObserver
| Argument | Type | Required? | Description |
| -------- | --------------------------------------------------------- | --------- | ------------------------------------------------------------------------- |
| target | React.RefObject | T | null | Yes | A React ref created by useRef()
or an HTML element |
| callback | UseResizeObserverCallback
| Yes | Invoked with a single ResizeObserverEntry
any time the target
resizes |
| options? | ResizeObserverOptions | No | Provide options to ResizeObserver |
Types
UseResizeObserverCallback
export type UseResizeObserverCallback = (
entry: ResizeObserverEntry,
observer: ResizeObserver
) => any
LICENSE
MIT