Skip to content
Snippets Groups Projects
useResizeObserver.ts 530 B
Newer Older
  • Learn to ignore specific revisions
  • import { useRef, useCallback } from 'react';
    
    James Long's avatar
    James Long committed
    
    
      func: (contentRect: DOMRectReadOnly) => void,
    
    ): (el: unknown) => void {
    
      const observer = useRef(null);
    
    James Long's avatar
    James Long committed
      if (!observer.current) {
        observer.current = new ResizeObserver(entries => {
          func(entries[0].contentRect);
        });
      }
    
    
      const elementRef = useCallback(el => {
    
    James Long's avatar
    James Long committed
        observer.current.disconnect();
        if (el) {
          observer.current.observe(el, { box: 'border-box' });
        }
      }, []);
    
      return elementRef;
    }