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

相关推荐
禅思院1 天前
AI对话前端从入门到崩溃:一个长对话引发的五层优化战争【引子】
前端·面试·架构
TrisighT1 天前
Electron 鸿蒙 PC 上点外链唤醒应用,我试了 6 种写法只有 1 种能跑
前端·electron·harmonyos
天才熊猫君1 天前
配置与数据分离:一种可视化搭建的属性编辑方案
前端·javascript
林希_Rachel_傻希希1 天前
web性能之相关路径——AI总结
前端·javascript·面试
竹林8181 天前
用 wagmi v2 踩坑两天,我终于搞懂了多链钱包切换在 DeFi 前端中的正确姿势
前端·javascript
用户2136610035721 天前
Vue项目搜索功能与面包屑导航
前端·javascript
星栈1 天前
LiveView 的实时通信,爽是爽,但 PubSub 和广播也最容易把自己绕晕
前端·前端框架·elixir
用户2930750976691 天前
告别关键词匹配,拥抱向量语义 —— RAG 搜索从零到一
前端
独孤留白1 天前
从C到Rust:告别 C 的"指针 + 长度"手动模式
前端·rust
掘金安东尼1 天前
中小厂前端候选人简历面试拆解:从 HR 面、技术面到主管面的双赢提问法
前端·面试