Vue报错TypeError: Cannot read properties of null (reading ‘insertBefore‘)

在写Vue或者Nuxt项目时,我们可能会遇到以下报错

TypeError: Cannot read properties of null (reading ‘insertBefore’)

从报错上看,看不到太多的信息与提示,因此对于第一次遇到这种报错的人,往往不知道从何下手去修复报错。下面,我们根据实践经验总结了几条方法,帮助你排查报错原因:

  1. v-if都改成v-show , 或者将所有v-if, v-else都改成v-show。有时候,之所以会报错,就是因为你使用了v-if 或者使用了v-ifv-else

  2. 如果你使用了katexauto-render自动渲染页面的数学公式。那么报错很可能就是因为你设置的自动渲染功能,其实就是因为你完全按照官网的方式设置导致的[doge]。你可以尝试将katex换成mathjax来渲染数学公式,或者修改你katex的自动渲染设置,将自动渲染函数里面的document.body改为特定的渲染区域document.getElementById(Id)

<script>
    var node = document.getElementById(Id)
    document.addEventListener("DOMContentLoaded", function() {
        renderMathInElement(node, {
          // customised options
          // • auto-render specific keys, e.g.:
          delimiters: [
              {left: '$$', right: '$$', display: true},
              {left: '$', right: '$', display: false},
              {left: '\\(', right: '\\)', display: false},
              {left: '\\[', right: '\\]', display: true}
          ],
          // • rendering keys, e.g.:
          throwOnError : false
        });
    });
</script>

如果你渲染整个document.body,那么有可能把正常的代码也给渲染成数学公式了,结果就出现了insertBefore的报错。

  1. 更换你的Dialog组件,在Nuxt 3报错TypeError: Cannot read properties of null (reading ‘shapeFlag‘)中,shapeFlag报错也是因为Dialog组件。不过,insertBefore报错的解决办法倒比shapeFlag容易些。如果你使用了服务端渲染,如Nuxt.js,那么insertBefore的报错可能源于你UI库使用的Dialog组件。以下以Nuxt.js为例说明,你可以尝试在Dialog组件上套一层ClientOnly
<ClientOnly>
    <Dialog>
    </Dialog>
</ClientOnly>

或者直接更换UI库。

总结一下,是否有感觉Vue或者Nuxt中有不少报错,是源于v-ifDialog,具体原因可能涉及Vue或Nuxt的底层原理。

原文地址: Vue - TypeError: Cannot read properties of null (reading ‘insertBefore’)
更多各领域的原创文章:弦圈- 找到属于你的圈子,让知识无荒原
百科全书弦圈百科
个人生活、经验分享弦圈社区

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值