Vue中的条件渲染与列表渲染

Vue 中 v-if、v-show、v-for 与 key 的使用边界和常见判断题。

#tech / dev / frame #resource / vue3 #type / synthesis #status / growing

[!info] related notes

Vue中的条件渲染与列表渲染

条件渲染和列表渲染是 Vue 模板里最常见的控制结构。它们看起来只是语法问题,实际会直接影响组件更新行为和节点复用效果。

为什么要放在一起理解

因为很多模板层问题,本质都和“节点什么时候出现”“节点身份怎么保持”有关。

条件渲染:v-ifv-show

v-if

  • 控制节点是否真正创建和销毁
  • 适合条件变化不频繁的场景

v-show

  • 节点通常还在,只是切换显示状态
  • 适合频繁切换的场景

列表渲染:v-for

v-for 用来根据一组数据生成节点列表,但真正关键的是 key

为什么 key 很重要

key 帮助 Vue 判断节点身份,从而更准确地复用、移动和更新节点。

如果 key 不稳定,就可能出现:

  • 输入框状态错位
  • 节点复用异常
  • 组件局部状态混乱

为什么不建议随便用 index 作为 key

当列表有插入、删除、排序时,index 对应的“节点身份”会变化,导致 Vue 错把旧节点当成新节点继续复用。

一条最常见的判断题

  • 频繁切换显示:优先 v-show
  • 条件稀少变化、需要懒创建:优先 v-if
  • 列表渲染时:优先稳定业务 ID 做 key

最短记忆方式

条件渲染看“节点要不要真的消失”,列表渲染看“节点身份稳不稳定”。

面试要点

来自 vue-v-if-vs-v-show-interview-question 的面试视角整理。

一句话回答

v-if 控制的是节点要不要真正渲染出来,v-show 控制的是节点渲染后要不要显示,所以前者更偏创建和销毁,后者更偏显示切换。

最稳的回答主线

v-if

  • 条件不成立时,节点通常不会被渲染出来
  • 切换时有创建和销毁成本
  • 适合条件变化不频繁的场景

v-show

  • 节点通常已经存在
  • 本质更接近切换 display
  • 适合频繁显示和隐藏的场景

面试里一句很稳的话

如果是“是否出现”这个层级的问题,更像 v-if;如果只是“是否显示”,更像 v-show

最短记忆方式

v-if 真删真建,v-show 主要切显示。

创建于 2026/3/19 更新于 2026/5/27