UNPKG

650 BJavaScriptView Raw
1import { useIsomorphicLayoutEffect, useMemoizedFn } from 'ahooks';
2export function useResizeEffect(effect, targetRef) {
3 const fn = useMemoizedFn(effect);
4 useIsomorphicLayoutEffect(() => {
5 const target = targetRef.current;
6 if (!target) return;
7 if (window.ResizeObserver) {
8 let animationFrame;
9 const observer = new ResizeObserver(() => {
10 animationFrame = window.requestAnimationFrame(() => fn(target));
11 });
12 observer.observe(target);
13 return () => {
14 window.cancelAnimationFrame(animationFrame);
15 observer.disconnect();
16 };
17 } else {
18 fn(target);
19 }
20 }, [targetRef]);
21}
\No newline at end of file