File tree 2 files changed +5
-72
lines changed
packages/@react-aria/utils
2 files changed +5
-72
lines changed Original file line number Diff line number Diff line change 1
- import { RefObject , useEffect , useRef } from 'react' ;
1
+ import { RefObject , useEffect } from 'react' ;
2
2
3
3
function hasResizeObserver ( ) {
4
4
return typeof window . ResizeObserver !== 'undefined' ;
@@ -11,7 +11,6 @@ type useResizeObserverOptionsType<T> = {
11
11
12
12
export function useResizeObserver < T extends Element > ( options : useResizeObserverOptionsType < T > ) {
13
13
const { ref, onResize} = options ;
14
- let raf = useRef ( null ) ;
15
14
16
15
useEffect ( ( ) => {
17
16
let element = ref ?. current ;
@@ -25,28 +24,17 @@ export function useResizeObserver<T extends Element>(options: useResizeObserverO
25
24
window . removeEventListener ( 'resize' , onResize , false ) ;
26
25
} ;
27
26
} else {
27
+
28
28
const resizeObserverInstance = new window . ResizeObserver ( ( entries ) => {
29
- if ( raf . current ) {
29
+ if ( ! entries . length ) {
30
30
return ;
31
31
}
32
- // avoid Error - ResizeObserver loop limit exceeded
33
- // it's ok to use a raf, ResizeObservers are already async and now we're just debouncing on frames
34
- raf . current = window . requestAnimationFrame ( ( ) => {
35
- raf . current = null ;
36
- if ( ! Array . isArray ( entries ) || ! entries . length ) {
37
- return ;
38
- }
39
- onResize ( ) ;
40
- } ) ;
41
- } ) ;
42
32
33
+ onResize ( ) ;
34
+ } ) ;
43
35
resizeObserverInstance . observe ( element ) ;
44
36
45
37
return ( ) => {
46
- if ( raf . current ) {
47
- window . cancelAnimationFrame ( raf . current ) ;
48
- raf . current = null ;
49
- }
50
38
if ( element ) {
51
39
resizeObserverInstance . unobserve ( element ) ;
52
40
}
Load Diff This file was deleted.
You can’t perform that action at this time.
0 commit comments