1
- import React , { ReactNode , useEffect } from 'react' ;
1
+ import React , { ReactNode , useEffect , useRef } from 'react' ;
2
2
3
3
export interface ResizeProps {
4
4
observerEle ?: HTMLElement | null ;
@@ -7,21 +7,28 @@ export interface ResizeProps {
7
7
}
8
8
9
9
const Resize : React . FC < ResizeProps > = ( { observerEle, onResize, children } ) => {
10
+ const resizeEventRef = useRef < ResizeProps [ 'onResize' ] > ( onResize ) ;
11
+ resizeEventRef . current = onResize ;
12
+
10
13
useEffect ( ( ) => {
11
- if ( typeof onResize !== 'function' ) return ;
14
+ const onResizeProxy = ( ) => {
15
+ if ( typeof resizeEventRef . current === 'function' ) {
16
+ resizeEventRef . current ( ) ;
17
+ }
18
+ } ;
12
19
if ( ! observerEle ) {
13
- window . addEventListener ( 'resize' , onResize , false ) ;
20
+ window . addEventListener ( 'resize' , onResizeProxy , false ) ;
14
21
return ( ) => {
15
- window . removeEventListener ( 'resize' , onResize , false ) ;
22
+ window . removeEventListener ( 'resize' , onResizeProxy , false ) ;
16
23
} ;
17
24
} else {
18
- const resizeObserver = new ResizeObserver ( onResize ) ;
25
+ const resizeObserver = new ResizeObserver ( onResizeProxy ) ;
19
26
resizeObserver . observe ( observerEle ) ;
20
27
return ( ) => {
21
28
resizeObserver . unobserve ( observerEle ) ;
22
29
} ;
23
30
}
24
- } , [ onResize , observerEle ] ) ;
31
+ } , [ observerEle ] ) ;
25
32
26
33
return < > { children } </ > ;
27
34
} ;
0 commit comments