@figliolia/size-observer
Version:
Resize Observers simplified
24 lines (22 loc) • 709 B
text/typescript
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;
};