vue中v-show 和 v-if 指令的區別

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;要么無法兼顧 “熄屏” 與 “工作…