Skip to content
Snippets Groups Projects
useResizeObserver.ts 530 B
// @ts-strict-ignore
import { useRef, useCallback } from 'react';

export function useResizeObserver(
  func: (contentRect: DOMRectReadOnly) => void,
): (el: unknown) => void {
  const observer = useRef(null);
  if (!observer.current) {
    observer.current = new ResizeObserver(entries => {
      func(entries[0].contentRect);
    });
  }

  const elementRef = useCallback(el => {
    observer.current.disconnect();
    if (el) {
      observer.current.observe(el, { box: 'border-box' });
    }
  }, []);

  return elementRef;
}