最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文教你徹底解決Vue3中的ResizeObserver警告

 更新時間:2025年05月21日 08:45:32   作者:來自星星的坤  
這篇文章主要為大家詳細介紹了介紹了Vue3中出現(xiàn)ResizeObserver loop completed with undelivered notifications錯誤的相關解決方法,有需要的小伙伴可以跟隨小編一起學習一下

問題背景

今天在使用 Vue 3 + Ant Design Vue 開發(fā)后臺管理系統(tǒng)時,在頁面頻繁觸發(fā) 元素尺寸變化(如表格滾動、窗口縮放) 的時候,控制臺頻繁出現(xiàn)如下警告:

ResizeObserver loop completed with undelivered notifications.

經過查詢,這是一個 瀏覽器層面的警告,尤其是 Chrome 對 ResizeObserver 的限制提示 —— 它不會導致程序崩潰,但如果開發(fā)模式下頻繁觸發(fā),會讓控制臺非常煩人,也不利于我們排查其他真正的錯誤。

如果你也在使用如 ant-design-vue 表格(<a-table>)或其它監(jiān)聽 DOM 尺寸變化的組件,八成也遇到這個問題。

ResizeObserver 警告解釋

這條警告源于 ResizeObserver 的實現(xiàn)機制。它表示監(jiān)聽了 DOM 尺寸變化后,在當前幀處理通知時,可能造成無限循環(huán)或未能及時處理完所有變化。

常見觸發(fā)場景包括:

  • 使用了 <a-table> 且設置了 scroll 屬性;
  • 頁面頻繁觸發(fā) resize;
  • 某些組件內部使用了 ResizeObserver(如圖表、布局組件);

最初嘗試的方式(未生效)

最開始參考了網上一些解決方案,如通過 Vue 的全局錯誤處理器或監(jiān)聽 window 的 error 事件來過濾該錯誤。

// main.js 或入口文件
app.config.errorHandler = (err, instance, info) => {
  if (err.message.includes('ResizeObserver')) {
    return false; // 阻止錯誤繼續(xù)傳播
  }
};
 
// 或監(jiān)聽全局錯誤
window.addEventListener('error', (e) => {
  if (e.message?.includes('ResizeObserver')) {
    e.stopImmediatePropagation();
  }
});

但 實際測試發(fā)現(xiàn):并不能有效阻止 ResizeObserver 警告彈出,尤其是在使用 ant-design-vue 表格時。

正確可行的解決方案

經過深入排查和多方驗證,發(fā)現(xiàn)該警告主要是 Webpack Dev Server(開發(fā)環(huán)境)中的 overlay 報錯層 顯示導致的。

解決思路

捕獲錯誤事件;

匹配 ResizeObserver 報錯信息;

隱藏開發(fā)服務器報錯 overlay 元素;

代碼實現(xiàn)

// main.js 或入口文件
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);
      }
 
      // 隱藏開發(fā)環(huán)境 overlay 報錯界面
      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');
      }
    }
  });
});

效果驗證

應用該代碼后,再次縮放窗口、多次滾動表格,控制臺不再彈出煩人的 ResizeObserver 警告,頁面開發(fā)體驗明顯提升。

方法補充

VUE 使用Element-plus ResizeObserver loop completed with undelivered notifications

問題描述:

鼠標拖拽瀏覽器窗口改變視圖大小時報錯。報錯如下

解決方案

在APP.VUE添加使用了ResizeObserver監(jiān)聽器并且該監(jiān)聽器觸發(fā)了重復的調整大小事件

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)
      }
    }

Vue 3.0 代碼

<template>
  <el-header>
    <Head />
  </el-header>

  <div class="EMS_ViewBotton LKJ_Displayflex">
    <div class="NavMenu">
      <NavMenu></NavMenu>
    </div>
    <div class="RefreshView">
      <router-view></router-view>
    </div>
  </div>
</template>

<script>
import { defineAsyncComponent } from 'vue'

export default {
  name: 'App',
  components: {
    Head: defineAsyncComponent(() => import('./components/Head.vue')),
    NavMenu: defineAsyncComponent(() => import('./components/NavMenu.vue')),
  },
  setup() {
    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)
      }
    }
    return {}
  },
}
</script>

<style  lang="scss" >
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  height: 100%;
}
</style>
<style>
@import url('assets/css/common.scss');
</style>

總結

ResizeObserver 警告是 非致命性警告,但在開發(fā)環(huán)境中會干擾控制臺輸出;

通過 error 事件捕獲并主動隱藏 webpack-dev-server 的 overlay 錯誤提示,可以有效消除影響;

本方案 適用于 Vue3 + Webpack 開發(fā)環(huán)境,特別是配合 ant-design-vue 的用戶;

注意:這只是開發(fā)階段優(yōu)化,不建議在生產環(huán)境使用類似做法;

到此這篇關于一文教你徹底解決Vue3中的ResizeObserver警告的文章就介紹到這了,更多相關Vue3 ResizeObserver警告解決內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • vue中循環(huán)多個li(表格)并獲取對應的ref的操作代碼

    vue中循環(huán)多個li(表格)并獲取對應的ref的操作代碼

    我想要獲取每一個循環(huán)并獲取每一個li(或者其它循環(huán)項)的ref,以便于后續(xù)的操作,接下來通過本文給大家分享vue中循環(huán)多個li(表格)并獲取對應的ref的操作代碼,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • vue中計算屬性(computed)、methods和watched之間的區(qū)別

    vue中計算屬性(computed)、methods和watched之間的區(qū)別

    這篇文章主要給大家介紹了關于vue中計算屬性(computed)、methods和watched之間區(qū)別的相關資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面跟著小編來一起學習學習吧。
    2017-07-07
  • 解決vue中使用less/sass及使用中遇到無效的問題

    解決vue中使用less/sass及使用中遇到無效的問題

    這篇文章主要介紹了解決vue中使用less/sass及使用中遇到無效的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Vue中img的src屬性綁定與static文件夾實例

    Vue中img的src屬性綁定與static文件夾實例

    本篇文章中主要介紹了Vue中img的src屬性綁定與static文件夾實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-05-05
  • vue路由--網站導航功能詳解

    vue路由--網站導航功能詳解

    這篇文章主要介紹了vue路由--網站導航功能詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • vue中el-form-item展開項居中的實現(xiàn)方式

    vue中el-form-item展開項居中的實現(xiàn)方式

    這篇文章主要介紹了vue中el-form-item展開項居中的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue實現(xiàn)登錄、注冊、退出、跳轉等功能

    vue實現(xiàn)登錄、注冊、退出、跳轉等功能

    這篇文章主要介紹了vue實現(xiàn)登錄、注冊、退出、跳轉等功能,需要的朋友可以參考下
    2020-12-12
  • vue實現(xiàn)echarts中的儀表盤

    vue實現(xiàn)echarts中的儀表盤

    這篇文章主要為大家詳細介紹了vue實現(xiàn)echarts中的儀表盤,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • vue如何判斷安卓還是IOS

    vue如何判斷安卓還是IOS

    這篇文章主要介紹了vue如何判斷安卓還是IOS,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue 兄弟組件的信息傳遞的方法實例詳解

    vue 兄弟組件的信息傳遞的方法實例詳解

    這篇文章主要介紹了vue 兄弟組件的信息傳遞的方法,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08

最新評論

大连市| 兴宁市| 婺源县| 扬州市| 张家港市| 红河县| 柳州市| 平南县| 德惠市| 新野县| 宜黄县| 阜康市| 阳泉市| 大足县| 无棣县| 雷州市| 印江| 江油市| 达州市| 新兴县| 德清县| 迁安市| 永嘉县| 苏尼特左旗| 临城县| 绵阳市| 九龙县| 错那县| 祁连县| 宁强县| 剑阁县| 石阡县| 大名县| 比如县| 黄陵县| 泉州市| 舒兰市| 琼中| 宁德市| 太仓市| 金坛市|