1- import React , { ReactNode , useEffect } from 'react' ;
1+ import React , { ReactNode , useEffect , useRef } from 'react' ;
22
33export interface ResizeProps {
44 observerEle ?: HTMLElement | null ;
@@ -7,21 +7,28 @@ export interface ResizeProps {
77}
88
99const 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