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);
}
}
}
- 闲话一提:出于某些原因,所在项目
package-lock.json
没有加入版本控制,导致克隆开发小版本发生了变化,进而带来了此项问题。所以,使用既有没有问题的package-lock.json
进行安装也是一种有效的解决方案。 - 相关参考