国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue基礎(chǔ)知識六:v-show和v-if有什么區(qū)別?使用場景分別是什么?

這篇具有很好參考價值的文章主要介紹了vue基礎(chǔ)知識六:v-show和v-if有什么區(qū)別?使用場景分別是什么?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

vue基礎(chǔ)知識六:v-show和v-if有什么區(qū)別?使用場景分別是什么?,vue.js,前端,javascript
一、v-show與v-if的共同點(diǎn)

我們都知道在 vue 中 v-show 與 v-if 的作用效果是相同的(不含v-else),都能控制元素在頁面是否顯示

在用法上也是相同的

<Model v-show="isShow" />
<Model v-if="isShow" />
  • 當(dāng)表達(dá)式為true的時候,都會占據(jù)頁面的位置
  • 當(dāng)表達(dá)式都為false時,都不會占據(jù)頁面位置

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

  • 控制手段不同
  • 編譯過程不同
  • 編譯條件不同

控制手段:v-show隱藏則是為該元素添加css–display:none,dom元素依舊還在。v-if顯示隱藏是將dom元素整個添加或刪除

編譯過程:v-if切換有一個局部編譯/卸載的過程,切換過程中合適地銷毀和重建內(nèi)部的事件監(jiān)聽和子組件;v-show只是簡單的基于css切換

編譯條件:v-if是真正的條件渲染,它會確保在切換過程中條件塊內(nèi)的事件監(jiān)聽器和子組件適當(dāng)?shù)乇讳N毀和重建。只有渲染條件為假時,并不做操作,直到為真才渲染

  • v-show 由false變?yōu)閠rue的時候不會觸發(fā)組件的生命周期
  • v-if由false變?yōu)閠rue的時候,觸發(fā)組件的beforeCreate、create、beforeMount、mounted鉤子,由true變?yōu)閒alse的時候觸發(fā)組件的beforeDestory、destoryed方法

性能消耗:v-if有更高的切換消耗;v-show有更高的初始渲染消耗;

三、v-show與v-if原理分析

具體解析流程這里不展開講,大致流程如下

  • 將模板template轉(zhuǎn)為ast結(jié)構(gòu)的JS對象
  • 用ast得到的JS對象拼裝render和staticRenderFns函數(shù)
  • render和staticRenderFns函數(shù)被調(diào)用后生成虛擬VNODE節(jié)點(diǎn),該節(jié)點(diǎn)包含創(chuàng)建DOM節(jié)點(diǎn)所需信息
  • vm.patch函數(shù)通過虛擬DOM算法利用VNODE節(jié)點(diǎn)創(chuàng)建真實(shí)DOM節(jié)點(diǎn)

v-show原理

不管初始條件是什么,元素總是會被渲染

我們看一下在vue中是如何實(shí)現(xiàn)的

代碼很好理解,有transition就執(zhí)行transition,沒有就直接設(shè)置display屬性

// https://github.com/vuejs/vue-next/blob/3cd30c5245da0733f9eb6f29d220f39c46518162/packages/runtime-dom/src/directives/vShow.ts
export const vShow: ObjectDirective<VShowElement> = {
  beforeMount(el, { value }, { transition }) {
    el._vod = el.style.display === 'none' ? '' : el.style.display
    if (transition && value) {
      transition.beforeEnter(el)
    } else {
      setDisplay(el, value)
    }
  },
  mounted(el, { value }, { transition }) {
    if (transition && value) {
      transition.enter(el)
    }
  },
  updated(el, { value, oldValue }, { transition }) {
    // ...
  },
  beforeUnmount(el, { value }) {
    setDisplay(el, value)
  }
}

v-if原理

v-if在實(shí)現(xiàn)上比v-show要復(fù)雜的多,因?yàn)檫€有else else-if 等條件需要處理,這里我們也只摘抄源碼中處理 v-if 的一小部分

返回一個node節(jié)點(diǎn),render函數(shù)通過表達(dá)式的值來決定是否生成DOM

// https://github.com/vuejs/vue-next/blob/cdc9f336fd/packages/compiler-core/src/transforms/vIf.ts
export const transformIf = createStructuralDirectiveTransform(
  /^(if|else|else-if)$/,
  (node, dir, context) => {
    return processIf(node, dir, context, (ifNode, branch, isRoot) => {
      // ...
      return () => {
        if (isRoot) {
          ifNode.codegenNode = createCodegenNodeForBranch(
            branch,
            key,
            context
          ) as IfConditionalExpression
        } else {
          // attach this branch's codegen node to the v-if root.
          const parentCondition = getParentCondition(ifNode.codegenNode!)
          parentCondition.alternate = createCodegenNodeForBranch(
            branch,
            key + ifNode.branches.length - 1,
            context
          )
        }
      }
    })
  }
)

四、v-show與v-if的使用場景文章來源地址http://www.zghlxwxcb.cn/news/detail-697812.html

  • v-if 與 v-show 都能控制dom元素在頁面的顯示
  • v-if 相比 v-show 開銷更大的(直接操作dom節(jié)點(diǎn)增加與刪除)
  • 如果需要非常頻繁地切換,則使用 v-show 較好
  • 如果在運(yùn)行時條件很少改變,則使用 v-if 較好

到了這里,關(guān)于vue基礎(chǔ)知識六:v-show和v-if有什么區(qū)別?使用場景分別是什么?的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Vue 中 v-if 和 v-show 的區(qū)別

    v-if ?和? v-show ?是 Vue.js 中常用的條件渲染指令,它們的作用是根據(jù)條件來控制元素的顯示與隱藏。 格式也差不多: 當(dāng) isShow 為 true 時顯示當(dāng)前元素,為 false 時隱藏 雖然它們的效果類似,但是它們在實(shí)現(xiàn)原理和使用場景上有一些區(qū)別。 1. 實(shí)現(xiàn)原理: v-if :根據(jù)條件動態(tài)添加

    2024年02月16日
    瀏覽(15)
  • Vue中v-if與v-show區(qū)別詳解

    Vue中v-if與v-show區(qū)別詳解

    在當(dāng)今Web開發(fā)領(lǐng)域中,構(gòu)建交互性強(qiáng)、可復(fù)用且易于維護(hù)的用戶界面是至關(guān)重要的。而Vue.js作為一款現(xiàn)代化且流行的JavaScript框架,正是為了滿足這些需求而誕生。它采用了MVVM架構(gòu)模式,并通過數(shù)據(jù)驅(qū)動和組件化的方式,使我們能夠更輕松地構(gòu)建出優(yōu)雅而高效的Web應(yīng)用程序。

    2024年01月21日
    瀏覽(24)
  • vue中v-if和v-show的區(qū)別和使用場景

    ? ? ? ? 問題:v-if和v-show我們都經(jīng)常用來控制某一部分內(nèi)容的顯示與隱藏,那么其具體區(qū)別是什么呢? 1.v-if v-if是通過增添和刪除DOM來控制元素的顯示與隱藏的 當(dāng)判斷值為true時在DOM樹中加入該DOM元素 當(dāng)判斷值為false時在DOM樹中刪除該DOM元素 ?2.v-show v-show是通過改變該元素

    2024年02月03日
    瀏覽(22)
  • vue: v-show 和 v-if 指令控制盒子的顯示隱藏

    vue: v-show 和 v-if 指令控制盒子的顯示隱藏

    1. v-show ??? 語法:? v-show=\\\"布爾值\\\"??? (true顯示, false隱藏) ??? 原理:? 實(shí)質(zhì)是在控制元素的 css 樣式,? `display: none;` 2. v-if?? ??? 語法: v-if=\\\"布爾值\\\"?? (true顯示, false隱藏) ??? 原理:? 實(shí)質(zhì)是在動態(tài)的 創(chuàng)建 或者 刪除 元素節(jié)點(diǎn) 應(yīng)用場景: ???????? 1. 如果是頻繁的切換顯

    2024年02月09日
    瀏覽(25)
  • v-if 和 v-show 的區(qū)別?

    v-show 和 v-if 都是Vue中的條件渲染指令,它們之間的主要區(qū)別如下: v-show : v-show 指令會通過修改元素的 style 屬性來顯示或隱藏元素,而不是修改元素的 display 屬性。這意味著,當(dāng)元素的 v-show 屬性為 true 時,元素會顯示,當(dāng) v-show 屬性為 false 時,元素會隱藏。 v-if : v-if 指

    2024年02月09日
    瀏覽(25)
  • FE_Vue學(xué)習(xí)筆記 條件渲染[v-show v-if] & 列表渲染[v-for] 列表過濾 列表排序

    FE_Vue學(xué)習(xí)筆記 條件渲染[v-show v-if] & 列表渲染[v-for] 列表過濾 列表排序

    使用template可以使其里面的內(nèi)容在html的結(jié)構(gòu)中不變。條件渲染: v-if 1)v-if=“表達(dá)式” 2)v-else-if=“表達(dá)式” 3)v-else {} 適用于:切換頻率較低的場景。特點(diǎn):不展示的DOM元素直接被移除。注意:v-if可以和v-else-if、v-else一起使用,但要求結(jié)構(gòu)不能被“打斷”。 v-show 寫法:

    2024年02月05日
    瀏覽(18)
  • v-if與v-show造成部分元素丟失的問題——v-if復(fù)用元素問題

    v-if與v-show造成部分元素丟失的問題——v-if復(fù)用元素問題

    在寫tab切換時遇到了一個問題,以下為簡化后的問題所在的代碼: 當(dāng)頁面加載時,先向id為 content 的div中添加了一些元素: 如果當(dāng) tabIndex 為2時執(zhí)行 addContent() ,上述 123456789 能夠正常顯示; 但如果: 在此時將 tabIndex 改為1,再將 tabIndex 改為2, 或者在 tabIndex 不為2時執(zhí)行 add

    2023年04月13日
    瀏覽(26)
  • 教程3 Vue3條件渲染指令(v-if、v-else、v-else-if、v-show、v-for)

    教程3 Vue3條件渲染指令(v-if、v-else、v-else-if、v-show、v-for)

    v-if 指令用于條件性地渲染一塊內(nèi)容。這塊內(nèi)容只會在指令的表達(dá)式返回真值時才被渲染。 可以使用 v-else 為 v-if 添加一個“else 區(qū)塊”。 v-else-if 提供的是相應(yīng)于 v-if 的“else if 區(qū)塊”。它可以連續(xù)多次重復(fù)使用。 可以用來按條件顯示一個元素的指令是 v-show。 v-if、v-else、

    2024年02月11日
    瀏覽(20)
  • React 簡單實(shí)現(xiàn) v-if和v-show的元素控制效果

    React 簡單實(shí)現(xiàn) v-if和v-show的元素控制效果

    react中并沒有直接的想模板引擎那樣的命令可以直接控制元素展示 但是 我們了解了 v-if和v-show之后 還是大有文章的 我們在 項(xiàng)目的 src下創(chuàng)建 components 文件夾 創(chuàng)建dom.jsx 編寫代碼如下 這里 我們定義了 componentWillUnmount 因?yàn)?我們知道 v-if 是會直接將元素從dom樹上干掉的 那么 他的

    2024年02月11日
    瀏覽(23)
  • React V6實(shí)現(xiàn)v-if、v-show、v-html

    React V6實(shí)現(xiàn)v-if、v-show、v-html

    功能背景 在vue中使用v-if、v-show、v-html這些命令得心應(yīng)手,那么react是否也存在這樣的命令呢?似乎是沒有的,需要自己實(shí)現(xiàn),也就是用原生的寫法直接控制dom。 實(shí)際效果 代碼實(shí)現(xiàn)

    2024年02月11日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包