news 2026/4/23 10:57:41

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/4/23 10:56:04

14、Vue Mixin 源码分析与使用场景详解

目录 一、Mixin 源码分析 1. 核心源码位置 2. 源码实现 3. 合并策略源码&#xff08;核心&#xff09; 4. 不同选项的合并策略 二、合并策略总结 三、使用场景 1. 提取公共逻辑 2. 页面埋点统计 3. 列表页通用逻辑 4. 表单验证 四、面试回答模板 问题1&#xff1a…

作者头像 李华
网站建设 2026/4/23 9:59:11

Simbody: C++ 多体动力学(Multibody Dynamics)与物理仿真库

文章目录&#x1f4cc; 核心特性&#x1f9f1; 基本使用方式&#xff08;C 示例&#xff09;&#x1f6e0;️ 安装与构建&#x1f4da; 学习资源&#x1f517; 相关项目Simbody 是一个高性能的 C 多体动力学&#xff08;Multibody Dynamics&#xff09;与物理仿真库&#xff0c…

作者头像 李华
网站建设 2026/4/14 12:31:57

十大超群2025项目管理工具盘点:非凡实力提升协作效率

一、禅道1.1 核心定位禅道是一款源自本土的开源项目管理工具&#xff0c;主打全生命周期项目管控&#xff0c;深度适配国内企业的项目管理流程与协作习惯&#xff0c;尤其在研发项目管理领域具备深厚积淀&#xff0c;可实现从需求提出、任务分配到测试交付的全链路闭环管理。1.…

作者头像 李华
网站建设 2026/4/22 20:59:14

2025最新!自考党必看10个AI论文工具测评与推荐

2025最新&#xff01;自考党必看10个AI论文工具测评与推荐 2025年自考论文写作工具测评&#xff1a;精准匹配需求&#xff0c;提升效率 随着AI技术的不断进步&#xff0c;越来越多的自考学生开始借助AI论文工具来辅助写作。然而&#xff0c;面对市场上琳琅满目的产品&#xff0…

作者头像 李华
网站建设 2026/4/23 9:54:36

不得了!武昌天玑AIGEO优化系统究竟有哪些?

揭秘天玑AIGEO优化系统&#xff1a;天玑AI互联网中心引领行业革新在当今数字化浪潮中&#xff0c;天玑AIGEO优化系统领域正面临着诸多挑战。当前&#xff0c;该领域技术面临着数据处理效率低、精准度不足以及多场景适配性差等问题。测试显示&#xff0c;传统的优化系统在数据处…

作者头像 李华
网站建设 2026/4/18 17:24:46

gcc/g++

gcc&#xff08;GNU C Compiler&#xff09;是针对 C 语言的编译器&#xff0c;g&#xff08;GNU C Compiler&#xff09;是针对 C 语言的编译器&#xff0c;二者都属于 GNU 编译器套件&#xff08;GCC&#xff09;&#xff0c;是 Linux/macOS 系统下最常用的编译工具&#xff…

作者头像 李华