在我的情况下,问题“ResizeObserver -循环限制超出”是由于窗口触发的。addEventListener("resize"和React的React. usestate . addEventListener。
详细地说,我正在处理名为useWindowResize的钩子,用例是这样的const [windowWidth, windowHeight] = useWindowResize();
代码通过useEffect对windowWidth/windowHeight的变化做出反应。
React.useEffect(() => {
ViewportService.dynamicDimensionControlledBy(
"height",
{ windowWidth, windowHeight },
widgetModalRef.current,
{ bottom: chartTitleHeight },
false,
({ h }) => setWidgetHeight(h),
);
}, [windowWidth, windowHeight, widgetModalRef, chartTitleHeight]);
所以任何浏览器窗口大小的调整都会导致这个问题。
我发现由于连接旧javascript世界(DOM操作,浏览器的事件)和新javascript世界(React)引起的许多类似问题可以通过setTimeout解决,但我将避免它,并在可能的情况下将其称为反模式。
因此,我的解决方案是将setter方法包装到setTimeout函数中。
React.useEffect(() => {
ViewportService.dynamicDimensionControlledBy(
"height",
{ windowWidth, windowHeight },
widgetModalRef.current,
{ bottom: chartTitleHeight },
false,
({ h }) => setTimeout(() => setWidgetHeight(h), 0),
);
}, [windowWidth, windowHeight, widgetModalRef, chartTitleHeight]);