useResizeObserver.tsx

Feb 16, 2023ยทWatch a container for changes using the ResizeObserver API
function useResizeObserver(
  ref: React.RefObject<HTMLDivElement>,
  onResize: (entry: ResizeObserverEntry) => void
) {
  const observer = useRef<ResizeObserver>(null);

  useEffect(() => {
    if (ref.current) {
      observer.current?.disconnect();
      observer.current = new ResizeObserver((entries) => {
        for (const entry of entries) {
          onResize(entry);
        }
      });
      observer.current.observe(ref.current);
    }

    return () => {
      observer.current.disconnect();
    };
  }, [ref.current, onResize]);
}