news 2026/5/13 9:49:38

12、v-show 和 v-if 的区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
12、v-show 和 v-if 的区别

v-show 和 v-if 的区别

核心区别

1. 渲染方式

v-if(条件渲染):

  • 是"真正"的条件渲染
  • 条件为false时,元素不会被渲染到 DOM
  • 条件为true时,才会创建和渲染元素

v-show(显示切换):

  • 无论条件是什么,元素始终会被渲染到 DOM
  • 只是通过 CSS 的display属性来控制显示/隐藏
  • 条件为false时,添加display: none
<!-- v-if:条件为 false 时,DOM 中没有这个元素 --> <div v-if="isShow">Hello</div> <!-- v-show:条件为 false 时,DOM 中有这个元素,但 style="display: none" --> <div v-show="isShow">Hello</div>

2. 切换开销

特性v-ifv-show
初始渲染开销小(条件为 false 时不渲染)大(总是渲染)
切换开销大(销毁/重建元素)小(只改变 CSS)
编译条件惰性的(lazy)不惰性

3. 生命周期

v-if:

<template> <div v-if="isShow"> <ChildComponent /> </div> </template>
  • 条件为falsetrue:组件会创建,触发createdmounted等钩子
  • 条件为truefalse:组件会销毁,触发beforeUnmountunmounted等钩子

v-show:

  • 组件只会创建一次,生命周期钩子只触发一次
  • 切换时不会触发生命周期钩子

4. 其他区别

v-if:

  • 支持v-else-ifv-else
  • 支持<template>标签
  • 可以与v-for配合(但不推荐同时使用)

v-show:

  • 不支持v-else-ifv-else
  • 不支持<template>标签
  • 不能用于组件的根元素(某些情况)

使用场景

使用 v-if 的场景

适合以下情况:

  1. 条件很少改变
<div v-if="userRole === 'admin'"> 管理员面板 </div>
  1. 初始条件为 false,且可能永远不会变为 true
<div v-if="showAdvancedSettings"> 高级设置(大多数用户不会打开) </div>
  1. 需要懒加载组件
<HeavyComponent v-if="needLoad" />
  1. 条件渲染多个元素
<template v-if="isLoggedIn"> <div>欢迎回来</div> <button>退出</button> </template> <template v-else> <button>登录</button> </template>

使用 v-show 的场景

适合以下情况:

  1. 频繁切换显示/隐藏
<!-- 模态框、下拉菜单等 --> <div v-show="isModalOpen" class="modal"> 模态框内容 </div>
  1. Tab 切换
<div v-show="activeTab === 'tab1'">Tab 1 内容</div> <div v-show="activeTab === 'tab2'">Tab 2 内容</div> <div v-show="activeTab === 'tab3'">Tab 3 内容</div>
  1. 需要保持组件状态
<!-- 切换时保持表单输入状态 --> <form v-show="showForm"> <input v-model="formData.name" /> </form>
  1. 动画效果需要元素存在于 DOM
<transition> <div v-show="isVisible">带过渡效果的内容</div> </transition>

性能对比示例

<template> <div> <!-- 场景1:频繁切换 - 使用 v-show --> <button @click="toggle">切换</button> <div v-show="isShow"> 我会频繁切换(推荐 v-show) </div> <!-- 场景2:条件很少改变 - 使用 v-if --> <div v-if="userType === 'premium'"> 高级用户专属内容(推荐 v-if) </div> <!-- 场景3:大型组件懒加载 - 使用 v-if --> <HeavyChart v-if="showChart" /> </div> </template> <script> export default { data() { return { isShow: true, userType: 'premium', showChart: false } }, methods: { toggle() { this.isShow = !this.isShow // 频繁切换 } } } </script>

总结

简单记忆:

  • v-if:条件渲染,适合"要不要"的场景
  • v-show:显示切换,适合"显示/隐藏"频繁切换的场景

选择原则:

  • 运行时条件很少改变 → 使用v-if
  • 需要频繁切换 → 使用v-show
  • 需要懒加载或条件复杂 → 使用v-if
  • 需要保持状态或性能优化切换 → 使用v-show
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/4 16:52:24

为什么你学了很多却依然做不好决策?

认知提升&#xff1a;突破思维边界&#xff0c;重塑你的世界观在信息爆炸的时代&#xff0c;我们每天都被海量数据包围——短视频、新闻推送、社交媒体、知识付费课程……获取信息从未如此便捷。根据中国互联网络信息中心&#xff08;CNNIC&#xff09;2024年发布的第53次《中国…

作者头像 李华
网站建设 2026/5/7 7:24:05

从0基础到完全掌握AD 第11讲 属性面板与原理图尺寸修改

我们今天开始讲原理图的部分&#xff0c;但是我们要讲一个问题&#xff0c;当我们在工作中需要画原理图的时候&#xff0c;我们是先要画原理图库的&#xff0c;就是起码你的库里得有这个元器件才能有原理图&#xff0c;那我们今天为什么先讲原理图呢&#xff1f;因为其实原理图…

作者头像 李华
网站建设 2026/5/13 9:40:41

RyTuneX(Win1011系统优化工具)

RyTuneX是一款专为Windows 10和Windows 11系统打造的系统优化工具&#xff0c;基于WinUI 3框架构建&#xff0c;旨在帮助用户优化系统资源&#xff0c;提升设备性能&#xff0c;同时增强隐私保护。 软件功能 系统优化&#xff1a;支持一键性能调整&#xff0c;可禁用Superfetc…

作者头像 李华
网站建设 2026/5/10 20:19:23

探寻户外发光字行业标杆:解读济南鑫中标的专业解决方案

在商业展示的视觉战场上&#xff0c;户外门头发光字无疑是吸引顾客目光的第一利器。无论企业品牌打造、网红店铺引流&#xff0c;还是临时展位宣传&#xff0c;优质的发光字不仅能传递商业信息&#xff0c;更能成为街道景观的艺术符号。口碑认证的专业服务商&#xff1a;鑫中标…

作者头像 李华
网站建设 2026/5/12 20:11:25

计算机毕业设计springboot基于协同过滤算法的旅游推荐系统 SpringBoot 驱动的个性化旅程发现平台:融合协同过滤的智慧推荐引擎 基于用户兴趣聚类的 SpringBoot 旅游行程智能

计算机毕业设计springboot基于协同过滤算法的旅游推荐系统hcgg8585 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。 当“说走就走”成为年轻人的口头禅&#xff0c;面对海量却雷…

作者头像 李华
网站建设 2026/5/4 14:34:48

LSTM量化交易策略的环境适应性与入参稳定性评估

功能说明与风险警示 本文实现的LSTM量化交易策略通过时间序列建模捕捉金融数据的非线性特征&#xff0c;核心功能包括&#xff1a;1&#xff09;基于历史价格序列构建特征工程&#xff1b;2&#xff09;采用多层LSTM网络学习时序依赖关系&#xff1b;3&#xff09;输出未来价格…

作者头像 李华