VUE3中,使用ant-design-vue表格滚动报错ResizeObserver loop completed with undelivered notifications.

报错信息:

在VUE3+TS中使用ant-design-vue的表格,设置X轴滚动 :scroll="{ x: true }"或 :scroll="{ x: 1500 }"时。刷新页面时会提示报错:

Compiled with problems:

ERROR

ResizeObserver loop completed with undelivered notifications. at eval (webpack-internal:///./node_modules/webpack-dev-server/client/overlay.js:296:58)

报错原因:

dataSource绑定的数组初始值为空数组,数组有值后会引起组件尺寸的变化。

ResizeObserver在回调中检测到尺寸变化,并试图通知观察者,但是在新的尺寸可见性检测之前,浏览器不能完成所有的回调执行,导致无限循环。

这是一个浏览器内部的警告,通常不会阻止页面的正常操作。

解决办法:

方法一:

在app.vue中添加如下代码

const ignoreErrors = ["ResizeObserver loop completed with undelivered notifications", "ResizeObserver loop limit exceeded"]

window.addEventListener('error', e => {
  let errorMsg = e.message;
  ignoreErrors.forEach(m => {
    if (errorMsg.startsWith(m)) {
      console.error(errorMsg);
      if (e.error) {
        console.error(e.error.stack);
      }
      const resizeObserverErrDiv = document.getElementById(
        'webpack-dev-server-client-overlay-div'
      );
      const resizeObserverErr = document.getElementById(
        'webpack-dev-server-client-overlay'
      );
      if (resizeObserverErr) {
        resizeObserverErr.setAttribute('style', 'display: none');
      }
      if (resizeObserverErrDiv) {
        resizeObserverErrDiv.setAttribute('style', 'display: none');
      }
    }
  })
});

方法会检索出该报错信息,并从样式层面将其隐藏。

方法二:

为dataSource绑定的数组初始值添加一个空对象, [ { } ]

让初始值有数据,等表格有数据渲染时,就不会导致尺寸变更,从而消除报错信息。

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值