就我而言,“ResizeObserver - 超出循环限制”的问题是由于window.addEventListener("resize"
React 的React.useState
.
详细地说,我正在研究名为useWindowResize
where the use case is like this的钩子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]);
因此,任何浏览器窗口调整大小都会导致该问题。
我发现由于连接old-javascript-world(DOM 操作,浏览器事件)和new-javascript-world(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]);