File tree Expand file tree Collapse file tree 2 files changed +35
-9
lines changed Expand file tree Collapse file tree 2 files changed +35
-9
lines changed Original file line number Diff line number Diff line change @@ -21,13 +21,13 @@ function useResizeObserver<T extends HTMLElement>(opts?: {
21
21
22
22
// Type definition when the hook just passes through the user provided ref.
23
23
function useResizeObserver < T extends HTMLElement > ( opts ?: {
24
- ref : RefObject < T > ;
24
+ ref : RefObject < T > | null ;
25
25
onResize ?: ResizeHandler ;
26
26
} ) : { ref : RefObject < T > } & ObservedSize ;
27
27
28
28
function useResizeObserver < T > (
29
29
opts : {
30
- ref ?: RefObject < T > ;
30
+ ref ?: RefObject < T > | null ;
31
31
onResize ?: ResizeHandler ;
32
32
} = { }
33
33
) : { ref : RefObject < T > } & ObservedSize {
@@ -69,7 +69,7 @@ function useResizeObserver<T>(
69
69
} ) ;
70
70
71
71
useEffect ( ( ) => {
72
- if ( resizeObserverRef . current ) {
72
+ if ( ! ( ref ?. current instanceof Element ) || resizeObserverRef . current ) {
73
73
return ;
74
74
}
75
75
@@ -103,14 +103,10 @@ function useResizeObserver<T>(
103
103
}
104
104
}
105
105
} ) ;
106
- } , [ ] ) ;
106
+ } ) ;
107
107
108
108
useEffect ( ( ) => {
109
- if (
110
- typeof ref !== "object" ||
111
- ref === null ||
112
- ! ( ref . current instanceof Element )
113
- ) {
109
+ if ( ! ( ref ?. current instanceof Element ) ) {
114
110
return ;
115
111
}
116
112
Original file line number Diff line number Diff line change @@ -145,6 +145,36 @@ describe("Vanilla tests", () => {
145
145
handler . assertSize ( { width : 100 , height : 200 } ) ;
146
146
} ) ;
147
147
148
+ it ( "should not initialize a ResizeObserver if no ref is passed" , async ( ) => {
149
+ spyOn ( window , "ResizeObserver" ) ;
150
+ const Test : FunctionComponent < HandlerResolverComponentProps > = ( {
151
+ resolveHandler,
152
+ } ) => {
153
+ const { width, height } = useResizeObserver ( { ref : null } ) ;
154
+ const currentSizeRef = useRef < {
155
+ width : number | undefined ;
156
+ height : number | undefined ;
157
+ } > ( { width : undefined , height : undefined } ) ;
158
+ currentSizeRef . current . height = height ;
159
+ currentSizeRef . current . width = width ;
160
+
161
+ useEffect ( ( ) => {
162
+ resolveHandler ( createComponentHandler ( { currentSizeRef } ) ) ;
163
+ } , [ ] ) ;
164
+
165
+ return (
166
+ < div style = { { width : 100 , height : 200 } } >
167
+ { width } x{ height }
168
+ </ div >
169
+ ) ;
170
+ } ;
171
+
172
+ await render ( Test ) ;
173
+
174
+ await delay ( 50 ) ;
175
+ expect ( window . ResizeObserver ) . not . toHaveBeenCalled ( ) ;
176
+ } ) ;
177
+
148
178
it ( "should be able to reuse the same ref to measure different elements" , async ( ) => {
149
179
let switchRefs = ( ) : void => {
150
180
throw new Error ( `"switchRefs" should've been implemented by now.` ) ;
You can’t perform that action at this time.
0 commit comments