Use Debounced Dimensions
fancy/use-debounced-dimensionsFreeHook
A hook component.
Install it
npx shadcn@latest add https://www.fancycomponents.dev/r/use-debounced-dimensions.jsonSource
1import { RefObject, useEffect, useState } from "react"23interface Dimensions {4 width: number5 height: number6}78export function useDimensions(9 ref: RefObject<HTMLElement | SVGElement | null>10): Dimensions {11 const [dimensions, setDimensions] = useState<Dimensions>({12 width: 0,13 height: 0,14 })1516 useEffect(() => {17 let timeoutId: NodeJS.Timeout1819 const updateDimensions = () => {20 if (ref.current) {21 const { width, height } = ref.current.getBoundingClientRect()22 setDimensions({ width, height })23 }24 }2526 const debouncedUpdateDimensions = () => {27 clearTimeout(timeoutId)28 timeoutId = setTimeout(updateDimensions, 250) // Wait 250ms after resize ends29 }3031 // Initial measurement32 updateDimensions()3334 window.addEventListener("resize", debouncedUpdateDimensions)3536 return () => {37 window.removeEventListener("resize", debouncedUpdateDimensions)38 clearTimeout(timeoutId)39 }40 }, [ref])4142 return dimensions43}
Files it writes
More from fancy
All 158 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Use Detect Browseruse-detect-browser | fancy | Hooks | Free | no deps | |
| Use Dimensionsuse-dimensions | fancy | Hooks | Free | no deps | |
| Use Elastic Line Eventsuse-elastic-line-events | fancy | Hooks | Free | no deps | |
| Use Line Breakdownuse-line-breakdown | fancy | Hooks | Free | no deps | |
| Use Line Countuse-line-count | fancy | Hooks | Free | no deps | |
| Use Mounteduse-mounted | fancy | Hooks | Free | no deps | |
| Use Mouse Positionuse-mouse-position | fancy | Hooks | Free | no deps | |
| Use Mouse Position Refuse-mouse-position-ref | fancy | Hooks | Free | no deps |
