vue报错ResizeObserver loop completed with undelivered notifications.
时间: 2023-11-15 21:58:52 浏览: 1001
这个错误通常是由于使用 ResizeObserver 监听元素尺寸变化时,出现了循环调用的情况。这可能是由于在回调函数中修改了元素的尺寸,导致 ResizeObserver 不断地触发回调函数,从而形成了循环调用。解决这个问题的方法是在回调函数中避免修改元素的尺寸,或者使用 debounce 或 throttle 函数来限制回调函数的执行频率。此外,还可以考虑使用其他的尺寸监听方式,比如监听 window 的 resize 事件或者使用 CSS 的 media query。
相关问题
vue报错:ResizeObserver loop completed with undelivered notifications.
当在 Vue.js 应用中遇到 "ResizeObserver loop completed with undelivered notifications" 这样的错误时,这通常表示 Vue 的 `ResizeObserver` 已经完成了一次循环,但是还有一些之前注册的观察任务没有得到响应。`ResizeObserver` 是用于监听元素大小变化的现代浏览器 API,Vue 使用它来响应某些组件的布局调整,比如响应式地处理窗口大小变化。
这个错误可能有以下几个原因:
1. **未正确取消观察**:如果你在组件卸载或不再需要观察时没有正确地移除 `ResizeObserver`,可能会导致通知积压。
2. **观察器配置问题**:确保你在使用 `Vue.ResizeObserver` 时没有设置过期时间(timeout)过短,这样可能会使某些观察任务来不及完成就被移除。
3. **循环阻塞**:如果组件内部的计算密集型操作过长,可能导致浏览器的渲染循环被阻塞,影响到 `ResizeObserver` 的执行。
4. **DOM更新延迟**:如果元素的大小改变发生在Vue更新DOM之前,观察者可能无法获取到最新的信息。
要解决这个问题,你可以尝试以下步骤:
- **检查代码**:确保在组件卸载时调用了 `resizeObserver.disconnect()` 来停止观察。
- **调整配置**:适当增加 `Vue.ResizeObserver` 的观察者超时时间,但注意不要过大以免影响性能。
- **优化循环**:避免在循环中执行过多计算,特别是对于那些与布局无关的操作。
- **确保及时更新DOM**:如果在计算之前进行DOM操作,考虑使用 `this.$nextTick(() => { ... })`包裹代码。
相关问题:
1. 如何在Vue组件卸载时正确清理ResizeObserver?
2. 如何调整Vue.ResizeObserver的超时时间?
3. 为什么会在Vue的更新循环中执行过多计算导致问题?
vue2 resizeobserver loop completed with undelivered notifications.
根据提供的引用内容,解决"vue2 resizeobserver loop completed with undelivered notifications"错误的方法如下:
1. 使用防抖函数:
```javascript
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);
}
}
```
2. 重写ResizeObserver类:
```javascript
const _ResizeObserver = window.ResizeObserver;
window.ResizeObserver = class ResizeObserver extends _ResizeObserver {
constructor(callback) {
callback = debounce(callback, 16);
super(callback);
}
}
```
3. 在需要使用ResizeObserver的地方添加show-overflow-tooltip属性:
```html
<el-table-column prop="title" label="标题" min-width="100" show-overflow-tooltip />
```
这些方法可以解决"vue2 resizeobserver loop completed with undelivered notifications"错误。
阅读全文