You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Vue组合式API调用router.push报错:Node.insertBefore异常

Vue组合式API调用router.push跳转404页面触发DOMException错误

问题描述

使用Vue组合式API时,尝试通过router.push({ path: '/notfound' })将用户路由到404页面,控制台会抛出错误:

DOMException: Node.insertBefore: Child to insert before is not a child of this node

但通过<RouterLink>组件进行跳转时完全正常。

相关代码

CountryView.vue中的跳转逻辑

<template>
.. (所有.vue模板均有根节点,因此这不是问题)
</template>

<script setup>
import { useRouter } from 'vue-router';
const router = useRouter();
router.push({ path: '/notfound' });
</script>

路由配置(router/index.js)

{
    path: '/notfound',
    name: 'NotFound',
    component: NotFound,
    meta: {
        scrollPos: {
            top: 0,
            left: 0,
        },
    },
},

解决方案

将路由跳转逻辑延迟到组件挂载完成后执行,比如使用onMounted生命周期钩子:

<script setup>
import { useRouter, onMounted } from 'vue';
const router = useRouter();

onMounted(() => {
  router.push({ path: '/notfound' });
});
</script>

或者使用nextTick确保DOM更新完成后再跳转:

<script setup>
import { useRouter, nextTick } from 'vue';
const router = useRouter();

nextTick(() => {
  router.push({ path: '/notfound' });
});
</script>

原因分析

直接在<script setup>的顶层作用域调用router.push,会在组件实例还未完成DOM挂载、Vue的DOM更新流程还在进行时触发路由跳转。此时DOM处于不稳定状态,路由切换时的DOM操作就会出现节点插入异常。而<RouterLink>是通过用户交互触发跳转,此时组件已经完成挂载,DOM状态稳定,因此不会出现该错误。

内容的提问来源于stack exchange,提问作者anas ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 02:40:32