UNPKG

@react-aria/utils

Version:
46 lines (36 loc) 1.03 kB
import {RefObject, useEffect} from 'react'; function hasResizeObserver() { return typeof window.ResizeObserver !== 'undefined'; } type useResizeObserverOptionsType<T> = { ref: RefObject<T | undefined> | undefined, onResize: () => void } export function useResizeObserver<T extends Element>(options: useResizeObserverOptionsType<T>) { const {ref, onResize} = options; useEffect(() => { let element = ref?.current; if (!element) { return; } if (!hasResizeObserver()) { window.addEventListener('resize', onResize, false); return () => { window.removeEventListener('resize', onResize, false); }; } else { const resizeObserverInstance = new window.ResizeObserver((entries) => { if (!entries.length) { return; } onResize(); }); resizeObserverInstance.observe(element); return () => { if (element) { resizeObserverInstance.unobserve(element); } }; } }, [onResize, ref]); }