🐛 Bug Report
In some situations, spectrum components that use useResizeObserver throw errors such as
ResizeObserver loop limit exceeded
to be thrown in Chrome and
ResizeObserver loop completed with undelivered notifications.
in Firefox.
Generally these errors are benign and can be swallowed. However, Safari's CORS policy throws anonymous script errors and swallowing all script errors in Safari is a less than ideal solution.
🤔 Expected Behavior
useResizeObserver should not be causing Resize Observers to throw errors.
😯 Current Behavior
💁 Possible Solution
Resize Observers generally throw these errors to prevent infinite loops as detailed here:
https://stackoverflow.com/questions/49384120/resizeobserver-loop-limit-exceeded
But these errors are preventable using the approach detailed in this article:
https://blog.elantha.com/resizeobserver-loop-limit-exceeded/
🔦 Context
💻 Code Sample
import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
window.addEventListener('error', (err) => {
console.log(err);
})
ReactDOM.render(<App />, document.getElementById("root"));
import React, {
useEffect,
useState,
} from 'react';
import {
defaultTheme,
Flex,
View,
Provider,
Content,
Text,
} from '@adobe/react-spectrum';
import {
Tabs,
Item,
} from '@react-spectrum/tabs';
export default function App() {
const [
widthUnder1100,
setWidthUnder1100,
] = useState(window.innerWidth < 1100);
useEffect(() => {
const handleResize = () => {
setWidthUnder1100(window.innerWidth < 1100);
};
window.addEventListener('resize', handleResize);
return () => window.removeEventListener('resize', handleResize);
}, []);
const shrink = widthUnder1100;
return (
<Provider theme={ defaultTheme } colorScheme='light'>
<Flex>
<div
data-id='collapse'
style={ { width: shrink ? '200px' : 'auto' } }>
<Tabs aria-label='Chat log collapse example'>
<Item title='John Doe' key='item1'>
<Content marginTop='size-250' marginStart='size-125'>
<Text>1</Text>
</Content>
</Item>
<Item title='Jane Doe' key='item2'>
<Content marginTop='size-250' marginStart='size-125'>
<Text>2</Text>
</Content>
</Item>
<Item title='Joe Bloggs' key='item3'>
<Content marginTop='size-250' marginStart='size-125'>
<Text>3</Text>
</Content>
</Item>
</Tabs>
</div>
</Flex>
</Provider>
);
}
🌍 Your Environment
| Software |
Version(s) |
| react-spectrum |
16 |
| Browser |
Chrome / Firefox / Safari |
| Operating System |
MacOS |
🧢 Your Company/Team
Adobe / Marketo
Marketo
🕷 Tracking Issue (optional)
🐛 Bug Report
In some situations, spectrum components that use
useResizeObserverthrow errors such asResizeObserver loop limit exceededto be thrown in Chrome and
ResizeObserver loop completed with undelivered notifications.in Firefox.
Generally these errors are benign and can be swallowed. However, Safari's CORS policy throws anonymous script errors and swallowing all script errors in Safari is a less than ideal solution.
🤔 Expected Behavior
useResizeObserver should not be causing Resize Observers to throw errors.
😯 Current Behavior
💁 Possible Solution
Resize Observers generally throw these errors to prevent infinite loops as detailed here:
https://stackoverflow.com/questions/49384120/resizeobserver-loop-limit-exceeded
But these errors are preventable using the approach detailed in this article:
https://blog.elantha.com/resizeobserver-loop-limit-exceeded/
🔦 Context
💻 Code Sample
🌍 Your Environment
🧢 Your Company/Team
Adobe / Marketo
Marketo
🕷 Tracking Issue (optional)