Skip to content

Commit 07e27b9

Browse files
authored
fix(resize): solve the problem of repeated registration during resize events (#573)
1 parent 4873a26 commit 07e27b9

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

src/resize/index.tsx

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { ReactNode, useEffect } from 'react';
1+
import React, { ReactNode, useEffect, useRef } from 'react';
22

33
export interface ResizeProps {
44
observerEle?: HTMLElement | null;
@@ -7,21 +7,28 @@ export interface ResizeProps {
77
}
88

99
const Resize: React.FC<ResizeProps> = ({ observerEle, onResize, children }) => {
10+
const resizeEventRef = useRef<ResizeProps['onResize']>(onResize);
11+
resizeEventRef.current = onResize;
12+
1013
useEffect(() => {
11-
if (typeof onResize !== 'function') return;
14+
const onResizeProxy = () => {
15+
if (typeof resizeEventRef.current === 'function') {
16+
resizeEventRef.current();
17+
}
18+
};
1219
if (!observerEle) {
13-
window.addEventListener('resize', onResize, false);
20+
window.addEventListener('resize', onResizeProxy, false);
1421
return () => {
15-
window.removeEventListener('resize', onResize, false);
22+
window.removeEventListener('resize', onResizeProxy, false);
1623
};
1724
} else {
18-
const resizeObserver = new ResizeObserver(onResize);
25+
const resizeObserver = new ResizeObserver(onResizeProxy);
1926
resizeObserver.observe(observerEle);
2027
return () => {
2128
resizeObserver.unobserve(observerEle);
2229
};
2330
}
24-
}, [onResize, observerEle]);
31+
}, [observerEle]);
2532

2633
return <>{children}</>;
2734
};

0 commit comments

Comments
 (0)