File size: 474 Bytes
7312c42 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import { useLayoutEffect, useState } from 'react'
import type { RefObject } from 'react'
export function useElementWidth<T extends HTMLElement>(ref: RefObject<T | null>): number {
const [width, setWidth] = useState(0)
useLayoutEffect(() => {
const el = ref.current
if (!el) return
const ro = new ResizeObserver(() => setWidth(el.clientWidth))
ro.observe(el)
setWidth(el.clientWidth)
return () => ro.disconnect()
}, [ref])
return width
}
|