Cannot read properties of null (reading ‘insertBefore‘)

今天记录一个前端异常:Cannot read properties of null (reading 'insertBefore')

网上说导致这个问题的原因很多,实际上就是因为渲染子节点时父节点已经被移除导致的异常。

我遇到的是项目中使用 vue antd 和 element plus ,配置了全局配置组件导致的错误。

这个问题在开发环境下一切正常,但是一旦打包上生产环境,则出现报错。

报错写法如下:

vue 复制代码
<div class="application" style="attr">
      <div class="app-main">
      		  <a-config-provider :locale="locale" 
				    :theme="{ 
				        token: theme,
				    }">
				        <el-config-provider :locale="i18n.global.locale === 'zh-cn' ? zhCnElement : enusElement">
				               <a-watermark v-bind="themeStore.watermark">
                       	 				<router-view></router-view> 
             			 	  </a-watermark>
             			 </el-config-provider>
   			</a-config-provider> 
       </div>
</div> 

组件 a-config-provider 和 el-config-provider 不能直接嵌套 router-view 或者组件,需要包裹一个 div

调整结构为如下后解决问题

vue 复制代码
<template>
    <a-config-provider :locale="locale" 
    :theme="{ 
        token: theme,
    }">
        <el-config-provider :locale="i18n.global.locale === 'zh-cn' ? zhCnElement : enusElement">
            <div class="application" style="attr">
                <div class="app-main">
                    <a-watermark v-bind="themeStore.watermark">
                        <router-view></router-view> 
                    </a-watermark>
                </div>
            </div> 
        </el-config-provider>
    </a-config-provider> 
</template>

<router-view> 负责动态创建 / 销毁路由页面组件;

a-config-provider、el-config-provider 本身都会渲染额外外层 DOM 容器(生成包裹 div);

路由切换时:旧页面组件销毁 → 新页面创建;

ElementPlus / Antdv 的 ConfigProvider 在更新 locale、theme 响应式变量时,自身会触发内部 DOM 重排、节点移动操作。

冲突场景:

路由组件销毁流程还没走完,外层 ConfigProvider 同时执行 DOM insertBefore 移动节点;此时待操作 DOM 已经被路由卸载、脱离父节点,浏览器直接抛出异常。


简单理解:

一边路由要把页面 DOM 移除,一边组件库 ConfigProvider 试图移动这个 DOM(insertBefore),节点不在父元素内,报错。

相关推荐
计算机魔术师1 小时前
新文章
前端
爱跳舞的烤冷面1 小时前
自学嵌入式第N天(Linux篇——文件编程)
java·开发语言·前端
IT_陈寒1 小时前
Vite的热更新突然失效,原来我忽略了这个配置
前端·人工智能·后端
怪奇云呼军1 小时前
闪电智能VoiceAgent 如何管理呼入、接听、桥接和挂断状态?
java·前端·网络·数据库·人工智能
云浪1 小时前
Milvus + RAG 实战:《红楼梦》问答助手
前端·人工智能·后端
梦醒沉醉2 小时前
2、JavaScript控制流和错误处理
javascript
恋猫de小郭2 小时前
Dart 3.13 大更新,感觉比 Flutter 更带劲
android·前端·flutter
晓得迷路了2 小时前
栗子前端技术周刊第 142 期 - DeepSeek Harness、pnpm 12 RC、crypto‑js...
前端·javascript·ai编程
xiaoxiangsiyan2 小时前
RHCE之2026年全套考点详解
运维·前端·网络·chrome·学习·rhce