@figliolia/size-observer
Version:
Resize Observers simplified
22 lines (21 loc) • 661 B
JavaScript
import { useLayoutEffect, useRef } from "react";
import { SizeObserver } from "./SizeObserver.js";
export const useSizeObserver = (options) => {
const node = useRef(null);
const stableOptions = useRef(options);
stableOptions.current = options;
const observer = useRef(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;
};