react17+antd4使用Table组件发生错误:ResizeObserver loop completed with undelivered notifications

在使用Table组件时出现了如下错误:

在这里插入图片描述

这个错误表明 ResizeObserver 遇到了一个循环通知的问题,这通常发生在 ResizeObserver 的回调函数中执行了会触发自身重新观察的操作,或者是因为某些原因,回调函数的执行被阻塞了,导致通知无法被及时传递和处理。

报错的原因:在页面绘制的时候,页面突然发生调整大小的事件,导致了样式和布局都需要重新评估,这个调整大小导致的布局变化,将延迟到下一帧来绘制。

简单粗暴解决:在报错组件里面,或者全局,添加隐藏这个浮层的样式。

//antd组件内 ResizeObserver loop limit exceeded报错隐藏
#webpack-dev-server-client-overlay {
   
   
  display: none !important;
}

这只是

### 解决 `ResizeObserver` 循环完成时存在未交付通知的问题 当遇到 `ResizeObserver loop completed with undelivered notifications` 错误时,这通常意味着观察目标的数量过多或布局不稳定性导致性能问题。一种常见的解决方案是在应用中捕获并处理此类错误事件。 #### 使用 Error Boundary 处理异常 为了防止此错误影响整个应用程序,在 React 组件树中的合适位置设置一个错误边界可以有效隔离潜在的影响: ```javascript class ErrorBoundary extends React.Component { constructor(props) { super(props); this.state = { hasError: false }; } static getDerivedStateFromError(error) { return { hasError: true }; } componentDidCatch(error, errorInfo) { console.error("Uncaught error:", error, errorInfo); } render() { if (this.state.hasError) { return <h1>Something went wrong.</h1>; } return this.props.children; } } ``` 通过这种方式可以在不影响其他部分的情况下优雅降级受影响区域[^1]。 #### 隐藏特定环境下的警告信息 对于开发环境中频繁出现但不影响实际使用的提示消息,可以选择性地屏蔽这些日志输出而不必完全忽略所有控制台记录。例如针对 Webpack 开发服务器叠加层的 CSS 样式调整可减少视觉干扰: ```css /* global.css */ #webpack-dev-server-client-overlay { display: none !important; } ``` 这种方法适用于快速消除不必要的调试信息而无需修改业务逻辑代码[^2]。 #### 调整 ResizeObserver使用方式 从根本上解决问题还需要审视如何运用 `ResizeObserver` API 。确保每次创建新的实例之前清理旧有的监听器,并合理规划被观测对象数量以维持良好的渲染效率。另外考虑采用防抖(debounce)/节流(throttle)技术来降低更新频率从而减轻浏览器负担。 ```typescript // global.tsx import { useEffect } from 'react'; function useDebouncedResizeObserver(ref, callback, wait = 16) { let timeoutId; const observer = new window.ResizeObserver((entries) => { clearTimeout(timeoutId); timeoutId = setTimeout(() => { entries.forEach(entry => callback(entry)); }, wait); }); useEffect(() => { if (!ref.current) return; observer.observe(ref.current); return () => { observer.unobserve(ref.current); }; }, [ref]); } export default function GlobalComponent({ children }) { // ... other code ... return ( <> {/* Your layout here */} {children} </> ); } ``` 上述方法展示了如何利用自定义 Hook 实现带有延迟特性的尺寸变化侦测机制,有助于缓解因过度触发引起的性能瓶颈[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值