UNPKG

@figliolia/size-observer

Version:
24 lines (22 loc) 709 B
import { useLayoutEffect, useRef } from "react"; import { SizeObserver } from "./SizeObserver"; import type { Options } from "./types"; export const useSizeObserver = <T extends Element>(options: Options) => { const node = useRef<T>(null); const stableOptions = useRef<Options>(options); stableOptions.current = options; const observer = useRef<SizeObserver<T> | null>(null); if (observer.current) { observer.current.setOptions(stableOptions.current); } useLayoutEffect(() => { if (!node.current) { return; } observer.current = new SizeObserver(node.current, stableOptions.current); return () => { observer.current?.destroy(); }; }, []); return node; };