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),节点不在父元素内,报错。

相关推荐
定栓11 分钟前
Webpack迁到Vite第七节(一):全家桶移除 — 配置文件与构建核心
前端·webpack·node.js
码艺-Alimjan17 分钟前
维吾尔语 RTL 排版的隐形利器:`\u200F`
前端·javascript
alwaysrun18 分钟前
Web之wasm-pack详解
前端·rust·web·wasm
Highcharts.js1 小时前
Highcharts 数据过滤实战指南:从基础实现到性能优化
javascript·性能优化·bi·highcharts·前端可视化·数据过滤·交互图表
广州华水科技1 小时前
如何通过单北斗GNSS实现精准的变形监测?
前端
云和数据.ChenGuang1 小时前
print(f“a+b=“,result) print(f“a+b={result}“)区别
java·前端·人工智能·python·深度学习
速易达网络1 小时前
基于 Vue3 + Flask + ECharts 构建政务 OA 系统门户
前端·echarts·政务
何何____2 小时前
TypeScript 函数类型兼容性
前端·javascript·typescript
雪芽蓝域zzs2 小时前
json数据转化成interface属性
前端·javascript·json