Get full control over your dimensions!
React Hook to get DOM Element BoundingClientRect together with the page offset snapshot and position relative to body, that covers all your needs.
What makes the package different - You can trigger an update when you really need it.
Countless packages do the same thing, but all of them trigger dimensions update whenever they want.
Let's take a look:
-
react-use-dimensions - Uses
resizeandscrollevent listeners. It's the most popular one. Seriously? -
react-cool-dimensions - Uses
ResizeObserverunder the hood. Not bad, but what if you don't want to change state on every resize, but update multiple elements dimensions simultaneously? -
react-dimensions-hook -
ResizeObserveragain. But you also can pass an array of dependencies, although it's not documented... I started with a few PRs to the package but decided to create a separate thing because of many breaking changes. -
react-hooks-get-dimensions - Uses
resizeevent listener. That's all. -
use-element-dimensions - Uses
ResizeObserver. Returns only width and height.
I hope you can see, that none let you control dimensions update by yourself.
import { useDimensions } from 'react-hook-dimensions';
/* ... */
const [elementRef, elementDimensions, updateElementDimensions] = useDimensions({
dependencies: [],
defaults: {
height: 300,
scrollY: 123,
},
layoutEffect: true,
});- Pass
refcalledelementRefhere to an element you want to measure. - Then take
dimensions datafrom the second param. Although initially, all values are going to be zeros or set to default. - There are two ways to update dimensions:
3.1. Use
dependenciesoptions. When one of the dependencies changes, the hook updates dimensions. You can set it to an empty array if you want to have a computed value from the start. 3.2. Call theupdateElementDimensionsfunction, that's the third param. - If you use
dependenciesyou can setlayoutEffecttotrueif you want to update dimenstions onuseLayoutEffect.
- If
dependenciesoption isn't set, thendimensionsvalue will be zero till theupdatefunction call. - You can set
defaultsoption, that will override initialdimensionvalue. It may be usefull for SSR. - The
dimensionsobject hasscrollXandscrollYvalues that computed onupdate, together withBoundingClientRect. - The
dimensionsobject haspositionLeftandpositionTopvalues relative to page. - 100% TypeScript.