使用element-plus出现ResizeObserver loop completed with undelivered notifications.报错

可以直接看最后的图片

报错信息::ERROR ResizeObserver loop completed with undelivered notifications. at handleError (webpack-internal:///./node_modules/webpack-dev-server/client/overlay.js:299:58) at eval (webpack-internal:///./node_modules/webpack-dev-server/client/overlay.js:318:7)

博主是vue3+ts+element-plus项目。

功能:点击按钮调用plus的Dialog对话框组件。

遇到的问题:

第一次点击时,不会报错,正常将弹窗弹出。

从第二次点击开始就报以上错误。

解决方案:加上图片中红色框框圈起来的那个属性,将它改为true

为什么会出现这个问题,为什么这个属性可以解决

由报错信息可知,这个报错提示是由于 ResizeObserver 观察到尺寸变化时,可能存在循环问题或者未正确处理的情况,导致了通知未能及时传递完成。

这个属性之所以能够解决,是因为这个属性是用来在关闭 Dialog 时,销毁其中的元素的。

所以当点击第二次的时候,就不会出现循环的问题了。

黄色字体纯属是博主个人的想法,目前博主也不知道到底是不是这么回事,如果有知道的大佬可以评论区告诉我一下,我好改正,以免误导众人。谢谢~

时隔好几天博主又回来修改了一下文章。因为博主不仅在使用对话框的时候出现了这个问题。

博主现在知道了一个终极解决方案就是:

在main.ts 或者 App.vue 文件中加入以下函数就行了

​


import { debounce } from "lodash";
    
    const _ = (window as any).ResizeObserver;
    (window as any).ResizeObserver = class ResizeObserver extends _ {
      constructor(callback: (...args: any[]) => void) {
        callback = debounce(callback, 100);
        super(callback);
      }
    };

​

### ElementPlus 弹窗中 ResizeObserver 错误解决方案 当遇到 `ResizeObserver loop completed with undelivered notifications` 的错误时,这通常是由于频繁触发的重排(reflow)或重绘(repaint)事件引起的[^3]。为了有效解决这个问题,在 Vue 项目中可以通过修改全局的 `window.ResizeObserver` 来实现。 通过引入防抖机制来减少不必要的回调调用频率,可以有效地缓解这一问题。具体做法是在项目的入口文件或者主要组件如 `App.vue` 中覆盖默认的 `ResizeObserver` 实现: ```javascript const debounce = (fn, delay) => { let timer; return (...args) => { if (timer) { clearTimeout(timer); } timer = setTimeout(() => { fn(...args); }, delay); }; }; // 覆盖原始的 ResizeObserver 类 const _ResizeObserver = window.ResizeObserver; window.ResizeObserver = class ResizeObserver extends _ResizeObserver { constructor(callback) { // 使用防抖后的回调替代原生回调 callback = debounce(callback, 100); super(callback); } }; ``` 上述代码片段展示了如何利用 JavaScript 的类继承特性以及简单的防抖逻辑来优化 `ResizeObserver` 行为,从而避免因快速连续的变化而导致性能瓶颈和警告信息的发生[^2]。 对于特定于 Element Plus 组件的情况,如果仅希望针对某些弹窗或其他 UI 控件应用此修正,则可以在相应组件初始化之前执行这段脚本,确保自定义版本的 `ResizeObserver` 已经生效再加载相关依赖项。 此外,也可以考虑升级到最新版的 Element Plus 和浏览器版本,因为开发者社区可能会已经修复了一些已知的问题并提高了兼容性和稳定性[^4]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值