【Vue】v-if和v-show的区别

个人博客:haichenyi.com。感谢关注

一. 目录

二. 核心区别

之前将css的显示隐藏的方式的时候,就已经提到过v-show和v-if了。忘记了的可以再回头去复习复习。

(2.1)渲染机制​​:

  • v-if: 真正的条件渲染,当条件为false时,组件也不会挂载到DOM中,组件会被销毁,对应的事件监听器和子组件也会被移除,当条件为true时,重新把组件挂载到DOM中
  • v-show: 不管是true还是false,组件都会渲染到DOM中,只是通过CSS的display:none属性,隐藏和显示组件
    (2.2)初始渲染开销​​:
  • v-if: 属性为false时不渲染组件,无渲染开销。当属性为true时触发渲染,有渲染开销
  • v-show: 不管属性时false还是true,组件都会渲染,只是给不给用户看的问题。都有渲染开销
    (2.3)切换开销​​:
  • v-if: 切换渲染条件,组件会经历销毁和重建,即会触发重排,开销高(频繁切换,不建议使用)
  • v-show: 切换渲染条件,只是修改css的样式,不会触发销毁和重建,一般触发重绘,开销低(适合频繁切换的场景)
    (2.4)编译过程​​:
  • v-if: 支持 template 标签,且可以与 v-else、v-else-if 配合使用。
  • v-show: 不支持 template 标签,也不能与其他指令组合使用。

三. 使用场景

  • 用 v-if​​:
    • 当条件在运行时很少改变,或者需要完全销毁/重建组件(例如权限控制、动态表单字段)。
    • 需要减少初始渲染开销的场景(例如初始隐藏的复杂组件)。
  • 用 v-show​​:
    • 当需要频繁切换显示/隐藏(例如选项卡切换、折叠面板)。
    • 元素/组件切换时的状态需要保留(例如表单输入框的缓存值)。

四. 性能对比

  • 首次加载:v-if 更高效(条件为 false 时不渲染)。
  • 频繁切换:v-show 更高效(避免重复销毁/重建)。

五. 总结

特性 v-if v-show
DOM 存在性​ 条件为false,不存在 始终存在,仅隐藏
​​初始渲染开销​​ 低(false时不渲染,无开销) 高(始终渲染)
​​切换开销​​ 高(触发重排) 低(触发重绘)
​适用场景​​ 条件不频繁变化 条件频繁变化

一句话回答​​:

v-if 通过销毁/重建 DOM 控制显示,适合不频繁切换的场景;v-show 通过 CSS 隐藏元素,适合频繁切换的场景。

相关推荐
计算机魔术师7 分钟前
Dario Amodei 发文呼吁为前沿 AI 降速并提出三点计划
前端
计算机魔术师22 分钟前
OpenAI的AI代理偷偷给RubyGems下毒,我们却毫无察觉
前端
甲维斯31 分钟前
0代码,0建模,3句话开发一个3D游戏!
前端·游戏·游戏开发
IT_陈寒43 分钟前
Vue的响应式更新把我坑惨了,原来问题出在这
前端·人工智能·后端
tingke1 小时前
别再堆 AGENTS.md 了:前端团队的 Agent 上下文分层落地指南
前端
李明卫杭州1 小时前
React 复合事件系统对比解析
前端·javascript·react.js
葡萄城技术团队2 小时前
SpreadJS V19.2 新特性揭秘:FILTERXML 函数
前端
行者全栈架构师2 小时前
Spring Boot 接入 MaxKey 单点登录:6 个内部系统,一次登录全通行
java·vue.js·后端
袋鼠云数栈UED团队2 小时前
AI Coding 方法论分析:同一个需求 SpecKit 、 Superpowers、 MattpocockSkills 不同设计
前端·aigc·ai编程
掰头战士2 小时前
Prompt Cache,如果agent全靠LLM方做隐式缓存实在不够用。
前端·llm·agent