[Vue warn]:nextTick 中出现错误:“NotFoundError:无法在‘Node’上执行‘insertBefore’

2024-02-19

我偶尔会在 Vue Web 应用程序中收到以下错误消息,但当它确实发生时,它会完全停止我的应用程序。

错误消息1:

[Vue warn]:nextTick 错误:“NotFoundError:执行失败 'Node' 上的 'insertBefore':新节点要位于其之前的节点 insert 不是该节点的子节点。”

错误消息2:

DOMException:无法在“Node”上执行“insertBefore”:节点 要插入的新节点不是该节点的子节点 节点。

错误消息 1 的堆栈跟踪:

错误消息 2 的堆栈跟踪:

根据堆栈跟踪,我已经确定仪表板组件中的 setListingFromCoords() 方法导致了问题。问题也不在于 vuex“getListingsFromCoords”操作,因为“数据”已使用正确的信息正确地进行了 console.logged。此外,data.results 也已正确填充。根据堆栈跟踪的问题是this.listings = data.results.

下面是我的 setListingFromCoords() 方法,该方法位于仪表板组件中:

setListingFromCoords() {
    return new Promise((resolve, reject) => {
        this.$store.dispatch(
            "getListingsFromCoords"
        ).then((data) => {
            console.log(data); // "data" is returned correctly here
            this.listings = data.results; // CODE BREAKS HERE
            this.previous = data.previous;
            this.hasPrevious = data.hasPrevious;
            this.next = data.next;
            this.hasNext = data.hasNext;
            resolve();
        }).catch((err) => {
            reject(err);
        });
    });
},

在我的仪表板组件的模板部分中,我有以下卡片组件,该组件根据上述 setListingFromCoords 方法返回的列表数量进行 v-for'ed。这是唯一依赖的组件listings,这让我相信这部分在某种程度上导致 Vue 抛出错误。

<card
    v-for="(listing, index) in listings"
    v-bind:index="index"
    v-bind:key="listing._id">
</card>

有人可以确认我的结论是否合理/正确吗?另外,如何修改代码来解决此问题以及为什么会引发此错误?


我有类似的问题vue-router原来我正在包装<router-view /> inside vue-fragment.

EDIT

这个问题被引入vue-片段 https://www.npmjs.com/package/vue-fragmentv1.5.2,将软件包降级到v1.5.1。

正如 @jai-kumaresh 提到的,删除^在 package.json 中"vue-fragment": "^1.5.1"因此 npm 将仅安装完全相同的版本。

EDIT 2021 年 10 月

vue-fragment如果您正在使用,则不再需要该包Vue 3,现在您可以直接向根元素添加多个元素。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[Vue warn]:nextTick 中出现错误:“NotFoundError:无法在‘Node’上执行‘insertBefore’ 的相关文章

随机推荐