最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

v-show?和?v-if?的區(qū)別及使用場景分析

 更新時間:2025年09月20日 09:20:37   作者:那一抹陽光多燦爛  
v-show通過CSS控制顯示隱藏,保持DOM元素,適合頻繁切換;v-if根據條件生成/銷毀DOM,影響生命周期,適用于靜態(tài)條件,兩者在性能、渲染方式及組件狀態(tài)管理上有顯著差異,需根據具體場景選擇,本文通過實例代碼解析v-show和v-if的區(qū)別及使用,感興趣的朋友一起看看吧

v-show 和 v-if 的區(qū)別及使用場景

一、v-show 與 v-if 的共同點

兩者都能控制元素在頁面中的顯示與隱藏(不包括 v-else 情況),且用法相同:

<Model v-show="isShow" />
<Model v-if="isShow" />

當表達式為 true 時,元素都會占據頁面位置;為 false 時,都不會占據位置。

二、v-show 與 v-if 的區(qū)別

v-show 和 v-if 的區(qū)別核心區(qū)別

特性v-ifv-show
渲染機制條件為真時渲染元素,否則銷毀始終渲染元素,通過 CSS 控制顯示
DOM 操作動態(tài)添加/移除 DOM 元素僅切換 display: none 樣式
初始開銷低(條件為假時不渲染)高(無論條件如何都渲染)
切換開銷高(涉及組件銷毀/重建)低(僅修改 CSS 屬性)
組件生命周期觸發(fā) created/mounted 等鉤子函數(shù)不觸發(fā)生命周期鉤子(始終存在)
組合使用支持 v-else-ifv-else無邏輯分支語法
  • 控制方式不同
    • v-show 通過添加 CSS display: none 隱藏元素,DOM 元素依然存在
    • v-if 會直接添加或刪除整個 DOM 元素
  • 編譯過程不同
    • v-if 有局部編譯/卸載過程,會銷毀和重建內部事件監(jiān)聽及子組件
    • v-show 僅進行簡單的 CSS 切換
  • 生命周期影響
    • v-show 狀態(tài)變化不會觸發(fā)組件生命周期
    • v-if 從 false 變?yōu)?true 會觸發(fā) beforeCreate、created、beforeMount、mounted 鉤子;從 true 變?yōu)?false 會觸發(fā) beforeDestroy、destroyed
  • 性能消耗
    • v-if 切換開銷更大
    • v-show 初始渲染開銷更大

三、實現(xiàn)原理分析

v-show 原理

無論初始條件如何,元素都會被渲染。其實現(xiàn)邏輯:

  1. 有 transition 時執(zhí)行 transition 動畫
  2. 無 transition 時直接設置 display 屬性
// Vue 3 的 v-show 指令實現(xiàn)
export const vShow: ObjectDirective<VShowElement> = {
    // 在元素掛載到 DOM 之前執(zhí)行
    beforeMount(el, { value }, { transition }) {
      // 保存元素的原始 display 值,用于后續(xù)恢復
      // 如果當前是隱藏狀態(tài)(display: none),則保存空字符串
      // 否則保存當前的 display 值
      el._vod = el.style.display === 'none' ? '' : el.style.display
      // 如果存在過渡動畫且值為真(顯示元素)
      if (transition && value) {
        // 執(zhí)行過渡動畫的進入前鉤子
        transition.beforeEnter(el)
      } else {
        // 否則直接設置元素的顯示狀態(tài)
        setDisplay(el, value)
      }
    },
    // ...其他生命周期處理(如 mounted, beforeUpdate, updated, beforeUnmount 等)
  }

v-if 原理

實現(xiàn)更為復雜,根據表達式值決定是否生成 DOM:

// Vue 3 的 v-if 指令轉換器
export const transformIf = createStructuralDirectiveTransform(
    // 匹配 v-if、v-else、v-else-if 指令的正則表達式
    /^(if|else|else-if)$/,
    // 轉換函數(shù),處理條件指令的 AST 節(jié)點
    (node, dir, context) => {
      // 調用 processIf 函數(shù)處理條件分支邏輯
      return processIf(node, dir, context, (ifNode, branch, isRoot) => {
        // 條件分支處理邏輯
        // ifNode: 當前處理的 if 節(jié)點
        // branch: 當前分支(if/else-if/else)
        // isRoot: 是否為根節(jié)點
      })
    }
  )

四、使用場景建議

  1. 頻繁切換場景 推薦使用 v-show
    適用于需要快速響應的交互元素:
  • Tab 切換內容
  • 下拉菜單/折疊面板
  • 頻繁開閉的 Modal 彈窗
  1. 靜態(tài)條件場景 推薦使用 v-if
    適用于內容較重且不常變更的情況:
  • 根據用戶角色/權限加載的初始頁面模塊
  • 登錄狀態(tài)相關的按鈕/導航欄切換
  • 大數(shù)據列表/圖表等按需加載的組件

到此這篇關于v-show 和 v-if 的區(qū)別及使用場景的文章就介紹到這了,更多相關v-show 和 v-if 區(qū)別內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • vue如何在style標簽中使用變量(數(shù)據)詳解

    vue如何在style標簽中使用變量(數(shù)據)詳解

    在我們編寫css樣式中是不能直接使用vue data中的變量的,下面這篇文章主要給大家介紹了關于vue如何在style標簽中使用變量(數(shù)據)的相關資料,需要的朋友可以參考下
    2022-09-09
  • 基于Vue3+TypeScript實現(xiàn)抖音式卡片滑動交互功能

    基于Vue3+TypeScript實現(xiàn)抖音式卡片滑動交互功能

    本文介紹如何用 Vue 3 + TypeScript 實現(xiàn)類似抖音的卡片滑動交互,應用于單詞記憶場景,完整方案包含手勢識別、堆疊動畫、實時反饋和狀態(tài)管理,需要的朋友可以參考下
    2026-06-06
  • 詳解VueJS應用中管理用戶權限

    詳解VueJS應用中管理用戶權限

    本篇文章主要給大家講述了VueJS應用中管理用戶權限的詳細過程和方法,以及相關的代碼展示,需要的朋友參考下吧。
    2018-02-02
  • Vue.js 的 watch函數(shù)基本用法

    Vue.js 的 watch函數(shù)基本用法

    watch 函數(shù)是 Vue.js 提供的一個強大工具,用于響應數(shù)據變化并執(zhí)行相應的回調,通過合理使用 watch 函數(shù),我們可以實現(xiàn)異步數(shù)據請求、表單驗證、動態(tài)樣式等多種功能,這篇文章主要介紹了Vue.js 的 watch函數(shù),需要的朋友可以參考下
    2024-08-08
  • vue配置接口域名方法總結

    vue配置接口域名方法總結

    在本篇文章里小編給大家分享了關于vue配置接口域名方法和相關知識點總結,需要的朋友們跟著操作下。
    2019-05-05
  • 教你三分鐘掌握Vue過濾器filters及時間戳轉換

    教你三分鐘掌握Vue過濾器filters及時間戳轉換

    這篇文章教你三分鐘掌握Vue過濾器filters及時間戳轉換,本文將結合時間戳轉換的例子帶你快速了解filters的用法,需要的朋友可以參考下
    2023-03-03
  • vue中如何簡單封裝axios淺析

    vue中如何簡單封裝axios淺析

    Axios 毋庸多說大家在前端開發(fā)中常用的一個發(fā)送 HTTP 請求的庫,用過的都知道,篇文章主要給大家介紹了關于vue中如何簡單封裝axios的相關資料,需要的朋友可以參考下
    2021-06-06
  • Vue 自定義組件 v-model 使用詳解

    Vue 自定義組件 v-model 使用詳解

    這篇文章主要介紹了Vue 自定義組件 v-model 使用介紹,包括vue2中使用和vue3中使用,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • vue進入頁面加載數(shù)據緩慢實現(xiàn)loading提示過程

    vue進入頁面加載數(shù)據緩慢實現(xiàn)loading提示過程

    這篇文章主要介紹了vue進入頁面加載數(shù)據緩慢實現(xiàn)loading提示過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue.js中proxyTable 轉發(fā)請求的實現(xiàn)方法

    vue.js中proxyTable 轉發(fā)請求的實現(xiàn)方法

    今天小編就為大家分享一篇vue.js中proxyTable 轉發(fā)請求的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09

最新評論

吉隆县| 岱山县| 斗六市| 永和县| 阳原县| 丹棱县| 外汇| 原阳县| 临沧市| 大新县| 酉阳| 买车| 隆化县| 麻阳| 平阴县| 甘南县| 共和县| 阿拉尔市| 澄城县| 墨江| 建平县| 红原县| 沈丘县| 冕宁县| 伊金霍洛旗| 繁峙县| 永仁县| 安国市| 涡阳县| 海南省| 青神县| 资溪县| 饶河县| 中方县| 广饶县| 灵石县| 睢宁县| 南召县| 陆河县| 徐水县| 平南县|