【VUE3 疑难杂症】使用 elementplus 报错:ResizeObserver loop completed with undelivered notifications.

总览

1.问题根源
2.解决办法(总共有3个,为不同需求人群准备!)

一、问题根源

1.你是否在代码中使用了 el-table 组件?

这个问题的根源在于,elementplus 中,移除了默认宽度,所以你如果要使用 el-table,就必须添加 width=“xxx”
不添加?不添加就等着报错吧宝贝。

示例:
请看,在这个行中,我没有设置 width=“xxx”,

在这里插入图片描述

那么如果页面宽度发生变化,就会报错!
根本就不需要花里胡哨地修改什么 main.ts、app.vue,除非你不是 el-table 而是 el-dialog 之类引发的错误。

在这里插入图片描述

二、如何解决

方法1:设置固定的 width=“xxx”

就这么简单!
如果你不想设置 width,想要让它 auto,那么接下来我会讲另外一个骚操作,彻底 “解决” 这个问题。

在这里插入图片描述

方法2(最为推荐):如果你不想设置 width 为一个固定值,而是想要它是 auto

在根目录下面创建一个 vue.config.js 的 js 文件,如图所示:

在这里插入图片描述

在里面添加内容 (这段代码的意义是,直接禁止全屏运行时报错出现,非常非常暴力,但管用。报错没有消失,而是被我们隐藏了):

module.exports = {
    devServer: {
        client: {
            overlay: false,
        },
    },
};

方法3:影响性能的解决方式,重写 ResizeObserver 方法,不报错,但有卡顿感

在 App.vue 文件中的 script 部分添加如下代码(100 是防止抖动的延迟毫秒):

const debounce = (fn, delay) => {
  let timer
  return (...args) => {
    if (timer) {
      clearTimeout(timer)
    }
    timer = setTimeout(() => {
      fn(...args)
    }, delay)
  }
}

const _ResizeObserver = window.ResizeObserver;
window.ResizeObserver = class ResizeObserver extends _ResizeObserver{
  constructor(callback) {
    callback = debounce(callback, 100);
    super(callback);
  }
}

4.问题解决了,页面变化也不会报错了 ↓

左侧 menu 展开,右侧 router-view 被挤压的状态:

在这里插入图片描述

左侧 menu 关闭,右侧 router-view 恢复的状态:

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
vue3中使用anrd表格报错"ResizeObserver loop completed with undelivered notifications"是由于ResizeObserver循环触发导致的。这个错误通常发生在表格组件中,当表格的大小发生变化时,ResizeObserver会不断触发回调函数,但是由于某些原因导致回调函数无法及时处理完毕,从而引发了这个错误。 解决这个问题的方法是使用防抖函数对ResizeObserver的回调函数进行包装。防抖函数可以延迟回调函数的执行,确保在一段时间内只执行一次。这样可以避免回调函数被频繁触发,从而解决了"ResizeObserver loop completed with undelivered notifications"错误。 以下是一个示例代码,演示了如何在vue3中使用防抖函数解决这个问题: ```javascript // 在main.js中引入防抖函数 import { createApp } from 'vue' import App from './App.vue' const app = createApp(App) // 在app.vue使用防抖函数包装ResizeObserver的回调函数 const debounce = (fn, delay) => { let timer = null; return function () { let context = this; let args = arguments; clearTimeout(timer); timer = setTimeout(function () { fn.apply(context, args); }, delay); } } const _ResizeObserver = window.ResizeObserver; window.ResizeObserver = class ResizeObserver extends _ResizeObserver { constructor(callback) { callback = debounce(callback, 16); super(callback); } } app.mount('#app') ``` 通过以上代码,我们将ResizeObserver的回调函数使用防抖函数进行包装,延迟执行时间设置为16毫秒。这样就能够解决"ResizeObserver loop completed with undelivered notifications"错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MicroLindb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值