Vue中v-if为何报属性undefined的错

问题描述

例如以下 v-if 会报TypeError: Cannot read properties of undefined (reading 'version')这样的错,即使给 version 设置 null 或 "",仍还是会报这样的错

xml 复制代码
<div v-if="dataForm.unknowData.version">
    <!-- 内容 -->
</div>

报错原因

v-if 是一个条件渲染指令,它会根据表达式的布尔值来决定是否渲染对应的 DOM 元素

  • 如果表达式是 undefined 或其他 "falsy" 值(如 null、0、"" 等),v-if 会将其视为 false,从而不渲染对应的 DOM 元素
  • 但是,如果表达式本身是 undefined,v-if 会尝试读取该值,从而导致错误

v-if 在解析表达式时,会尝试访问dataForm.unknowData.version。如果 dataForm.unknowData 是 undefined 或 null ,那么dataForm.unknowData.version会直接导致 TypeError,因为 undefined 和 null 都没有 version 属性。

解决方案

解决方案如下:

1)初始化或其他操作对该数据进行操作时,始终确保dataForm.unknowData是一个对象

2)在 v-if 中使用逻辑运算符来确保dataForm.unknowData是一个对象:

ini 复制代码
<div v-if="dataForm.unknowData && dataForm.unknowData.version">
</div>

3)使用可选链操作符

在 Vue3 中,可以使用可选链操作符?.来避免错误:

ini 复制代码
<div v-if="dataForm.unknowData?.version">
</div>

当使用?.时,如果左侧的表达式是 undefined 或 null,操作符会立即返回 undefined,而不会尝试访问右侧的属性,从而避免了错误

相关推荐
shoubepatien5 分钟前
JavaWeb_Web基础
java·开发语言·前端·数据库·intellij-idea
WordPress学习笔记13 分钟前
wordpress外贸主题Google地图添加(替换)方案
前端·wordpress·wordpress地图
计算机毕设VX:Fegn089518 分钟前
计算机毕业设计|基于springboot + vue旅游信息推荐系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·课程设计·旅游
古月฿1 小时前
大学生素质测评系统设计与实现
java·vue.js·redis·mysql·spring·毕业设计
码农秋1 小时前
Element Plus DatePicker 日期少一天问题:时区解析陷阱与解决方案
前端·vue.js·elementui·dayjs
未来之窗软件服务1 小时前
未来之窗昭和仙君(五十六)页面_预览模式——东方仙盟筑基期
前端·仙盟创梦ide·东方仙盟·昭和仙君·东方仙盟架构
top_designer1 小时前
Illustrato:钢笔工具“退休”了?Text to Vector 零基础矢量生成流
前端·ui·aigc·交互·ux·设计师·平面设计
源码获取_wx:Fegn08951 小时前
基于springboot + vue物业管理系统
java·开发语言·vue.js·spring boot·后端·spring·课程设计
星哥说事1 小时前
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!
前端
donecoding1 小时前
前端AI开发:为什么选择SSE,它与分块传输编码有何不同?axios能处理SSE吗?
前端·人工智能