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,而不会尝试访问右侧的属性,从而避免了错误

相关推荐
方方洛17 分钟前
AI 教程系列-TUI 应用开发教程14-技能系统与可扩展性
前端·javascript·typescript
方方洛22 分钟前
AI 教程系列-TUI 应用开发教程05-大模型对话界面设计
前端·javascript·typescript
方方洛34 分钟前
AI 教程系列-TUI 应用开发教程08-流式响应与动画
前端·javascript·typescript
方方洛40 分钟前
AI 教程系列-TUI 应用开发教程04-第一个 TUI 应用
前端·javascript·typescript
cooldream200941 分钟前
AI 时代,前端工程师的“新学习路线“—— 从“学框架“到“用 AI“
前端·人工智能·学习
明日清晨1 小时前
printf(“%p\n“,&((struct A *)NULL)->m_float)的原理
linux·服务器·前端
kingwebo'sZone1 小时前
C#事件声明办法
java·前端·c#
战场小包1 小时前
世界杯结束了,我用 AI 造了平行宇宙,这次结局你写
前端·人工智能·ai编程
方方洛1 小时前
AI 教程系列-TUI 应用开发教程03-TUI 框架与技术选型
前端·javascript·ui kit
第二个人2 小时前
Python Web开发:从Flask到FastAPI,我经历了什么
前端·python·flask