v-showv-if 是 Vue.js 中两个非常重要的指令,都用于条件性地显示或隐藏元素,但它们的实现方式和适用场景有本质区别。

简单来说,最核心的区别是:

  • v-if“真正的”条件渲染,它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。
  • v-show 只是简单地切换 CSS 属性 display: none

下面从多个维度进行详细的对比。


对比表格

特性v-ifv-show
实现机制动态添加/移除 DOM 元素切换 CSS 的 display: none 属性
初始渲染成本(如果初始为 false,则什么都不做,直到第一次为 true 时才渲染)(无论初始条件如何,元素都会被编译并渲染,只是通过 CSS 隐藏)
切换开销(销毁和重建组件/元素、触发生命周期钩子)(只是切换 CSS 属性,非常高效)
生命周期会触发 组件的 created, mounted, destroyed 等生命周期钩子不会触发 任何生命周期钩子(因为组件始终存在,只是被隐藏)
编译/惰性惰性的:如果初始条件为假,则不会编译或渲染,直到条件第一次变为真。非惰性的:无论初始条件如何,元素都会被编译并保留在 DOM 中。
用法任何条件渲染适用于需要非常频繁切换的场景
不适合场景需要非常频繁切换的场景(因为切换开销大)不适合初始条件为假且永远不需要显示的情况(因为仍然会渲染)
v-else 配合支持不支持
<template> 配合支持(可以包裹多个元素)不支持

详细说明与示例

1. 实现机制与 DOM 结构

v-if
当条件为 false 时,对应的元素或组件完全不会出现在 DOM 中。当条件变为 true 时,Vue 会开始编译并渲染它们,并将其插入到 DOM 中。

<div v-if="isVisible">使用 v-if 控制</div>
  • isVisiblefalse 时,检查元素结构,你会发现这个 <div> 根本不存在
  • isVisibletrue 时,这个 <div> 会被创建并插入到 DOM 中。

v-show
无论条件为何,元素始终会被编译并保留在 DOM 中。它只是通过内联的 CSS 样式 display: none 来切换显示和隐藏。

<div v-show="isVisible">使用 v-show 控制</div>
  • isVisiblefalse 时,检查元素结构,你会发现这个 <div> 仍然在 DOM 中,但它有内联样式 style="display: none;"
  • isVisibletrue 时,内联样式会被移除,变为 style="",元素正常显示。
2. 生命周期

由于 v-if 会真正地销毁和重建元素及其子组件,因此它会触发完整的生命周期钩子。

<ChildComponent v-if="isVisible" />
  • isVisibletrue 变为 false 时,ChildComponent 会被销毁,触发 beforeDestroydestroyed 钩子。
  • isVisiblefalse 变为 true 时,ChildComponent 会重新创建,触发 beforeCreate, created, beforeMount, mounted 等钩子。

而对于 v-show,由于组件始终存在于 DOM 中,只是被隐藏,所以无论怎么切换,它的生命周期钩子都只会在初始渲染时触发一次

3. 性能考量

选择使用哪个指令,主要取决于你需要的切换频率。

  • 需要频繁切换时(如:切换标签页、显示/隐藏过滤器、toggle 开关),使用 v-show

    • 原因:它的切换成本极低,仅仅是修改 CSS,避免了频繁销毁和重建组件带来的性能开销。
  • 运行时条件很少改变,或者初始条件很可能为 false 时,使用 v-if

    • 原因:它具有惰性,如果初始不为真,可以避免不必要的编译和渲染成本,从而加快初始页面加载速度。

总结与如何选择

记住这个简单的原则:

  • v-if 就像是 “彻底销毁”。不用的时候直接拆掉,用的时候再重新盖。适合变化不频繁、条件判断复杂(常与 v-else-if 连用)或者对初始加载性能有要求的场景。
  • v-show 就像是 “拉上窗帘”。东西还在屋里,只是你看不见。适合需要非常频繁切换显示状态的场景。

简单决策流程图:

  1. 需要频繁显示/隐藏吗? ( -> 用 v-show)
  2. 这个元素在大多数情况下根本不需要显示吗? ( -> 用 v-if,节省初始渲染开销)
  3. 条件逻辑复杂,需要配合 v-elsev-else-if 吗? ( -> 用 v-if)
  4. 不确定?默认先考虑使用 v-if,因为它的惰性特性在很多时候对性能更友好,除非你遇到了明显的性能问题(比如切换卡顿)再考虑换成 v-show

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/96699.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/96699.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/96699.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux中iptables命令

iptables 命令详解iptables 是 Linux 系统内核级防火墙工具&#xff0c;用于配置、维护和检查 IPv4 数据包过滤规则&#xff08;IPv6 使用 ip6tables&#xff09;。以下是核心用法&#xff1a;一、基本概念表&#xff08;Tables&#xff09;filter&#xff1a;默认表&#xff0…

【springboot 技术代码】集成mongodb 详细步骤

SpringBoot 深度集成 MongoDB 详细步骤1. MongoDB 简介与 SpringBoot 集成概述1.1 SpringBoot 集成 MongoDB 的优势2. 环境准备与依赖配置2.1 版本兼容性矩阵2.2 详细依赖配置2.3 详细配置说明2.3.1 单节点配置2.3.2 集群配置3. 实体映射与集合管理3.1 详细实体类注解3.2 索引管…

云计算-K8s 运维:Python SDK 操作 Job/Deployment/Pod+RBAC 权限配置及自定义 Pod 调度器实战

简介 在 Kubernetes 运维中,自动化资源管理与定制化调度是提升效率的核心需求,而 Python SDK 是实现这一目标的关键工具。本次围绕 K8s Python SDK 展开全场景实战,以 “代码 + 效果” 双维度,覆盖 5 大核心运维场景,Job 自动化创建(先清理重名资源再部署计算任务)、De…

Excel 转化成JSON

Excel 转化成JSON import pandas as pd import json import osdef excel_to_json(excel_path, sheet_name0, orientrecords, save_pathNone):"""将Excel文件转换为JSON格式并可选择保存到文件参数:excel_path: Excel文件路径sheet_name: 工作表名称或索引&#…

Linux 进阶用法

一、系统性能调优系统性能调优是 Linux 管理中的关键技能&#xff0c;它能显著提升系统在不同应用场景下的表现。通过针对性的调优&#xff0c;可以解决资源瓶颈问题&#xff0c;提高服务响应速度&#xff0c;优化资源利用率。&#xff08;一&#xff09;CPU 性能调优知识点详解…

14.苹果ios逆向-app的调试方式

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;图灵Python学院 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取码&#xff1…

深入理解 React useEffect

一、useEffect基础概念 1、什么是副作用&#xff08;Side Effects&#xff09;&#xff1f; 在React中&#xff0c;副作用是指那些与组件渲染结果无关的操作&#xff0c;例如&#xff1a; 数据获取&#xff08;API调用&#xff09;手动修改DOM设置订阅或定时器记录日志 2、useE…

Yapi中通过MongoDB修改管理员密码与新增管理员

如何在Docker部署的Yapi中通过MongoDB修改管理员密码与新增管理员便捷管理Yapi权限&#xff1a;无需前端重置&#xff0c;直接通过数据库操作修改密码及添加管理员一、进入MongoDB容器并连接数据库 首先&#xff0c;通过以下命令进入运行中的MongoDB容器&#xff1a; docker ex…

【EasyR1】GRPO训练

官方github&#xff1a;https://github.com/hiyouga/EasyR1 参考&#xff1a;https://opendeep.wiki/hiyouga/EasyR1/quickstart 代码和环境配置 github&#xff1a;https://github.com/hiyouga/EasyR1 新建一个虚拟环境&#xff1a; python -m venv easyr1 source easyr1/b…

2025年KBS SCI1区TOP,新颖奖励与ε-贪婪衰减Q-learning算法+局部移动机器人路径规划,深度解析+性能实测

目录1.摘要2.新颖奖励与ε-贪婪衰减Q-learning算法3.结果展示4.参考文献5.代码获取6.算法辅导应用定制读者交流1.摘要 路径规划是移动机器人的核心任务&#xff0c;需要在高效导航的同时规避障碍。本文提出了一种改进Q-learning算法——定制化奖励与ε-贪婪衰减Q-learning&…

运行npm run命令报错“error:0308010C:digital envelope routines::unsupported”

下载的前后端分离架构的开源项目&#xff0c;运行“npm run serve”命令启动前端服务时报错“error:0308010C:digital envelope routines::unsupported”&#xff0c;这个错误通常是由于Node.js版本与项目依赖不兼容导致的&#xff0c;特别是在Node.js v17版本中&#xff0c;百…

AI计算提效关键。自适应弹性加速,基于存算架构做浮点运算

一、自适应弹性加速是提升芯片能效比的有力手段自适应弹性加速技术是现代芯片设计中提升能效比的关键路径之一。它摒弃了传统芯片在设计时采用的静态、固化的资源分配与功能设定模式&#xff0c;通过引入动态调整机制&#xff0c;使得芯片能够根据实时的应用需求和负载变化&…

Spring Boot测试陷阱:失败测试为何“传染”其他用例?

一个测试失败&#xff0c;为何“传染”其他测试&#xff1f;——Spring Boot 单元测试独立性与泛型陷阱实战解析 &#x1f6a9; 问题背景 在日常开发中&#xff0c;我们常会遇到这样的场景&#xff1a; 正在开发新功能 A&#xff0c;写了一个 testFeatureA() 测试方法&#xff…

Web开发中的CGI:通用网关接口详解

一、CGI的设计意图&#xff1a;解决Web的"静态"困境 在CGI出现之前&#xff0c;Web服务器只能做一件事&#xff1a;返回预先写好的静态文件&#xff08;HTML、图片等&#xff09;。每个用户看到的内容都是一模一样的。 设计意图很简单但却革命性&#xff1a; 让Web服…

在 SSMS 中查找和打开已保存的查询文件

在 SSMS 中查找和打开已保存的查询文件 在 SQL Server Management Studio (SSMS) 中&#xff0c;您可以轻松地查找并打开已保存的查询文件&#xff08;通常以 .sql 扩展名保存&#xff09;。SSMS 提供了直观的界面支持直接打开这些文件&#xff0c;无需额外工具。以下是详细步骤…

Protues使用说明及Protues与Keil联合仿真实现点亮小灯和流水灯

目录 1Protues介绍及新建工程 1.1进入软件 1.2文件创建 1.3默认选项 1.5设计面板 1.6添加元器件 1.7终端模式 1.8激励源模式 1.9探针模式 1.10仪表 1.11二维直线 1.12字符 2 Protues电路原理图仿真 2.1 220V交流电转5V直流电稳压电路仿真原理图 2.1.1 仿真原理图…

Linux PCI 子系统:工作原理与实现机制深度分析

Linux PCI 子系统&#xff1a;工作原理与实现机制深度分析 1. Linux PCI 子系统基础概念 1.1 PCI/PCIe 基础概念回顾 总线拓扑&#xff1a; PCI/PCIe 系统是一个树形结构。CPU 连接到 Root Complex (RC)&#xff0c;RC 连接至 PCIe 交换机 (Switch) 和 PCIe 端点设备 (Endpoint…

RabbitMQ 全面指南:架构解析与案例实战

目录一、RabbitMQ 简介1.1 什么是 RabbitMQ1.2 RabbitMQ 的核心组件1.3 RabbitMQ 的应用场景二、环境搭建2.1 安装 RabbitMQ2.2 安装 Erlang2.3 配置 RabbitMQ三、RabbitMQ 核心概念与工作原理3.1 消息模型3.2 交换机类型3.3 队列特性3.4 消息确认机制四、Spring Boot 集成 Rab…

6.2 el-menu

一、 <el-menu>: 菜单组件&#xff0c;定义了侧边栏内部的具体导航项、层级结构和交互行为。<el-container><!-- 侧边栏容器 --><el-aside width"200px"><!-- 菜单内容 --><el-menu default-active"1" class"el-men…

Windows 笔记本实现仅关屏仍工作:一种更便捷的 “伪熄屏” 方案

在使用 Windows 笔记本作为临时服务器或需要后台持续运行程序时&#xff0c;我们常面临一个需求&#xff1a;关闭屏幕以节省电量或减少光污染&#xff0c;同时保持系统正常工作。然而&#xff0c;网络上流传的诸多方法往往存在局限&#xff0c;要么无法兼顾 “熄屏” 与 “工作…