1 | import { useIsomorphicLayoutEffect, useMemoizedFn } from 'ahooks';
|
2 | export 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 |