Error in render: “TypeError: Cannot read properties of null (reading ‘0‘)“ 报错解决方案

在Vue项目中遇到渲染时 TypeError: Cannot read properties of null 的问题,原因是尝试访问未加载完成的异步数据。解决方案是在模板中使用v-if指令对数据进行判断,确保数据存在时再进行渲染。这样可以防止因数据延迟导致的错误,提高页面渲染的稳定性。
摘要由CSDN通过智能技术生成

近期在写项目的时候遇到一个很有趣的问题,当我准备获取一个数组中的子数组到页面时,提示我报错Error in render: “TypeError: Cannot read properties of null (reading ‘0’)”,渲染的时候不能读取,这是怎么回事呢,赶紧搜索一下,发现问题了

这是我原来报错的代码

		<view class="apply-name">
          <text>{{ item.applicant }}</text>
          <text>
            {{ item.inspector[0] }}
          </text>
       	</view>

报错信息
在这里插入图片描述
出现报错的原因
我们在调用inspector这个接口的时候,是异步调用,而在vue的渲染机制中,异步数据先显示初始数据(也就是本来就存在的数据),再显示带数据的数据,所以当vue开始执行的时候,inspector 中是没有数据的,所以才会报错。

解决方法

解决方法也很简单,就是在加载该片段的时候添加一个判断语句,v-if=“item.inspector” 如果它为空,就不进行该模块的渲染,更改后代码如下

		<view class="apply-name">
          <text>{{ item.applicant }}</text>
          <text v-if="item.inspector">
            {{ item.inspector[0] }}
          </text>
        </view>

解决是解决了,但是为什么v-if作用就这么厉害呢,是不是很好奇,那我们接着往下看

Vue进行了如下转化template —> ast —> render函数,最后根据生成的render函数来生成相应的DOM,这里就不拓展讲了。在生成ast和render函数的时候,Vue对v-if这一类指令进行了解析。所以在rend()
进行渲染时,v-if已经开始进行判断了,所以我理解的是,此时insepector中的数据已经被渲染了,所以再次寻找里面的数据的时候就不会报错了。

  • 14
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值