Vue 條件渲染 v-if 與 v-show

什么是條件渲染堤结?

在 Vue 中绎狭,有兩種方法可以有條件地渲染應(yīng)用程序的某些部分:v-ifv-show灌侣。

條件渲染是控制是否渲染模板代碼的能力治专。我們可以使用應(yīng)用程序的當(dāng)前狀態(tài)來實(shí)現(xiàn)這一點(diǎn)卖陵。

讓我們看一個(gè)例子。假設(shè)我們正在創(chuàng)建一個(gè)表單张峰,如果密碼長(zhǎng)度小于6個(gè)字符泪蔫,我們希望顯示一條無效的輸入錯(cuò)誤消息。

<tempalte>
  <div>
    {{ email }} {{ password }}
    <p><input type="text" placeholder="Email" v-model="email" /></p>
    <p><input type="pass" placeholder="pass" v-model="pass" /></p>
    <p class="error-message" v-if="pass.length < 6">密碼必須至少為6個(gè)字符</p>
  </div>
</template>
<script setup>
import { ref } from 'vue'

const email = ref('')
const password= ref('')
</script>

在本例中喘批,我們使用 v-if 指令撩荣,然后傳入一個(gè)布爾語句铣揉,如果語句為 true,渲染元素婿滓。如果為 false老速,則不會(huì)渲染。

回到例子凸主,我們將 v-if 替換為 v-show

<p class="error-message" v-show="pass.length < 6">密碼必須至少為6個(gè)字符</p>

可以看到,它們有同樣效果额湘,但它們的工作方式是不同的卿吐。

v-ifv-show 有什么區(qū)別?

關(guān)鍵區(qū)別在于 v-if 有條件地渲染元素锋华,而 v-show 有條件地顯示元素嗡官。

這意味著 v-if 在切換條件時(shí)實(shí)際上會(huì)銷毀和重新創(chuàng)建元素。同時(shí)毯焕,v-show 將始終將元素保留在 DOM 中衍腥,并且只會(huì)通過更改其 CSS 來切換其顯示。

<template>
  <div>
    <p v-if="active">使用 v-if</p>
    <p v-show="active">使用 v-show</p>
    <button @click="active = !active">切換狀態(tài)</button>
  </div>
</template>
<script setup>
import { ref } from 'vue'

const active= ref(false)
</script>

當(dāng)我們的元素被顯示時(shí)纳猫,DOM 看起來像這樣婆咸。

active: true

當(dāng)我們按下按鈕時(shí),DOM 看起來像這樣芜辕。

image.png

可以看到尚骄,使用 v-if,條件塊已從 DOM 中完全刪除侵续。但是對(duì)于 v-show倔丈,它 display 被設(shè)置為 none

如何選擇状蜗?

經(jīng)常有這么一道面試題需五,問 v-ifv-show 的區(qū)別?

回顧上文轧坎,我們知道兩者的共同點(diǎn)都是控制元素顯示和隱藏宏邮。

那他們的不同點(diǎn)呢?這里總結(jié)幾點(diǎn):

  • v-show 控制的是元素的 CSS(display)眶根;v-if 是控制元素本身的添加或刪除蜀铲。
  • v-show 切換的時(shí)候不會(huì)觸發(fā)組件的生命周期。 v-iffalse 變?yōu)?true 會(huì)觸發(fā)組件的beforeCreate属百、create记劝、beforeMountmounted 鉤子(跟組件的初始化執(zhí)行的鉤子一致)族扰,由 true 變?yōu)?false 會(huì)觸發(fā)組件的 beforeDestory厌丑、destoryed 鉤子定欧。

如果以性能為準(zhǔn)則:

  • v-if 具有更高的切換成本(每當(dāng)條件更改時(shí))
  • v-show 具有更高的初始渲染成本。

因此怒竿,如果您需要頻繁切換某些內(nèi)容砍鸠,請(qǐng)使用 v-show。如果條件在運(yùn)行時(shí)變化不那么頻繁耕驰,請(qǐng)使用 v-if爷辱。

另一件要考慮的事情是使用 v-if 允許我們將其他邏輯塊與它結(jié)合使用。具體來說朦肘,我們可以使用 v-elsev-else-if 塊來真正將高級(jí)邏輯構(gòu)建到我們的應(yīng)用程序中饭弓。

<template>
  <p v-if="active">使用 v-if</p>
  <p v-else-if="true">else if</p>
  <p v-else>else</p>
</template>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市媒抠,隨后出現(xiàn)的幾起案子弟断,更是在濱河造成了極大的恐慌,老刑警劉巖趴生,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阀趴,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡苍匆,警方通過查閱死者的電腦和手機(jī)刘急,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锉桑,“玉大人排霉,你說我怎么就攤上這事∶裰幔” “怎么了攻柠?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)后裸。 經(jīng)常有香客問我瑰钮,道長(zhǎng),這世上最難降的妖魔是什么微驶? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任浪谴,我火速辦了婚禮,結(jié)果婚禮上因苹,老公的妹妹穿的比我還像新娘苟耻。我一直安慰自己,他們只是感情好扶檐,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布凶杖。 她就那樣靜靜地躺著,像睡著了一般款筑。 火紅的嫁衣襯著肌膚如雪智蝠。 梳的紋絲不亂的頭發(fā)上腾么,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音杈湾,去河邊找鬼解虱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛漆撞,可吹牛的內(nèi)容都是我干的殴泰。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼叫挟,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼艰匙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起抹恳,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎署驻,沒想到半個(gè)月后奋献,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旺上,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年瓶蚂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宣吱。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡窃这,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出征候,到底是詐尸還是另有隱情杭攻,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布疤坝,位于F島的核電站兆解,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏跑揉。R本人自食惡果不足惜锅睛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望历谍。 院中可真熱鬧现拒,春花似錦、人聲如沸望侈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽甜无。三九已至扛点,卻和暖如春哥遮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背陵究。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工眠饮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人铜邮。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓仪召,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親松蒜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子扔茅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容