element-plus的el-select报ResizeObserver loop completed with undelivered notifications错的一种可能原因及解决方案

报错场景:el-select放在了table的td里,我做的是根据el-select切换的动态表格。切换时就会报此错误。
原因分析:分析发现,本场景在切换select时(实际上是在下拉选项框弹出的情况下),其所在单元格尺寸发生了变化(因为我没有定表格内单元格的尺寸)。
本质原因:选项弹出层依赖监听(window.ResizeObserver)计算尺寸时出了问题。
解决方案:保证el-select所在单元格尺寸不发生变化即可。
或者可以:全局修补下,在main引入就好

const debounce = (callback: Function, delay: number) => {
    let tid: any
    return function () {
        const ctx = self
        tid && clearTimeout(tid);
        tid = setTimeout(() => {
            callback.apply(ctx, arguments)
        }, delay)
    }
}

export default () => {
    const _ = (window as any).ResizeObserver;
    (window as any).ResizeObserver = class ResizeObserver extends _ {
        constructor(callback: any) {
            callback = debounce(callback, 20)
            super(callback);
        }
    }
}
posted @ 2023-08-24 17:04  彼时今日  阅读(7389)  评论(0编辑  收藏  举报