亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Vue基礎(chǔ)教程之條件渲染和列表渲染

 更新時間:2021年11月12日 17:13:14   作者:蜜瓜的前端進階  
Vue會盡可能高效地渲染元素,通常會復(fù)用已有元素而不是從頭開始渲染。這么做會使Vue變得非常快,下面這篇文章主要給大家介紹了Vue基礎(chǔ)教程之條件渲染和列表渲染的相關(guān)資料,需要的朋友可以參考下

前言

什么是條件渲染?在我們的頁面中會有很多這樣的應(yīng)用場景,比如說我們今天要上架一個活動,這個活動頁面只在今天有效,在晚上的24點或者說在明天早上凌晨0點1秒的時候就要把這個頁面下下來,把這個圖片隱藏掉。如果我們安排一個運維兄弟手動去改HTML,那么運維兄弟就會瘋掉的,其實這里就會有一個很簡單的辦法,就是條件的渲染,即當(dāng)0點的時候我們?nèi)ヅ袛噙@個條件,如果這個條件達到了比如說24點或者是0點一個時間點,之后就把它隱藏起來,這個就是一個條件的渲染。

什么是列表渲染呢?這個就是最常見的,比如說在頁面上有很多個元素,很多的圖片,像新聞網(wǎng)站一次加載20條,如果用手敲去寫HTML,那樣新聞網(wǎng)站的人就不用去干活了,每天就去敲HTML代碼了,這里面就會有類似于我們C語言代碼里面的for循環(huán)那樣,有一個循環(huán)語句在這個地方,讓我們把這個頁面的元素構(gòu)建出來生成出來,這就是列表渲染。1 v-if 和 v-show

1.1 作用

都用來控制元素的顯示和隱藏

1.2 控制元素顯隱的方式

v-if控制虛擬DOM樹上元素的創(chuàng)建和銷毀,Vue的響應(yīng)系統(tǒng)會根據(jù)虛擬DOM樹對實際DOM進行更新,從而間接控制實際DOM上元素的顯隱

v-show通過給元素添加樣式display:none來讓元素隱藏

1.3 初始渲染對比

v-if是惰性的,如果初始渲染條件為false,什么都不做;只有條件為true,才會開始編譯

v-show不管初始渲染條件如何,元素始終被編譯并保留,之后根據(jù)條件通過CSS切換

1.4 切換消耗對比

如果頻繁切換顯示與隱藏,v-if會頻繁創(chuàng)建、銷毀元素,而v-show只是切換樣式

故v-if的切換消耗更高

1.5 使用場景對比

如果元素的顯示隱藏在一開始就定下來不會再變了,使用v-if

如果元素需要頻繁切換顯隱,使用v-show

1.6 其他

  • v-if可以搭配template使用,v-show不可以
  • v-if可以搭配v-else,v-show無特殊語法

2 v-if 和 v-for

2.1 v-if 和 v-for 不能同時用的原因

為什么不能把v-if和v-for同時用在同一個元素上?

當(dāng) Vue 處理指令的時候,v-for的優(yōu)先級比v-if高,因此這個模板:

<ul>
  <li v-for="item in list" v-if="item.isActive" :key="item.id">
    {{item.name}}
  </li>
</ul>

會經(jīng)過如下運算:

this.list.map(function(item) {
  if (item.isActive) {
    return item.name
  }
})

我們每次重新渲染的時候都要遍歷整個列表,即使isActive為true的item很少,這會帶來性能方面的極大浪費,因此兩者不能同時用在同一個元素上

2.2 v-if 和 v-for 一起用的解決方案

1、如果想控制整個列表的顯隱,可以將v-if移動到容器元素上,比如:

<body>
  <div id="example">
    <ul v-if="listShow">
      <li v-for="item in activeItems" :key="item.id">{{item.name}}</li>
    </ul>
  </div>
</body>
<script>
  const vm = new Vue({
    el: "#example",
    data: {
      list: [
        { id: 1, name: "路飛", isActive: true },
        { id: 2, name: "索隆", isActive: false },
        { id: 3, name: "山治", isActive: true },
      ],
      listShow: false,
    }
  });
</script>

2、如果想過濾列表中的項目,可以使用計算屬性(computed)返回過濾后的列表,比如:

<body>
  <div id="example">
    <ul>
      <li v-for="item in activeItems" :key="item.id">{{item.name}}</li>
    </ul>
  </div>
</body>
<script>
  const vm = new Vue({
    el: "#example",
    data: {
      list: [
        { id: 1, name: "路飛", isActive: true },
        { id: 2, name: "索隆", isActive: false },
        { id: 3, name: "山治", isActive: true },
      ],
    },
    computed: {
      activeItems: function () {
        return this.list.filter((item) => item.isActive);
      },
    },
  });
</script>

3 列表渲染的 key 有什么用

在使用v-for進行列表渲染時,必須給元素添加一個key屬性,并且這個key必須是唯一標(biāo)識

<ul>
 <li v-for="item in list" :key="item.id">{{item.name}}</li>
</ul>

我們知道,Vue 在更新元素時,不會直接操作真實DOM(渲染真實DOM開銷是很大的),而是根據(jù)新數(shù)據(jù)生成新的虛擬 DOM,然后對新舊虛擬DOM進行差異對比,根據(jù)對比結(jié)果進行DOM操作來更新視圖

列表渲染時,如果有key屬性,由于它是唯一標(biāo)識,在對比兩個新舊節(jié)點時若key不同也就沒有深入對比的必要了。

為什么不能用index作為key?因為index是不穩(wěn)定可變的,比如刪除了列表第一個元素,會導(dǎo)致后面的元素index發(fā)生變化,從而導(dǎo)致key發(fā)生變化。這時,Vue 在對比新舊節(jié)點時,遇到key相同的節(jié)點,就會進行深入對比,發(fā)現(xiàn)節(jié)點內(nèi)容發(fā)生了變化,就會去創(chuàng)建新的真實DOM用來替換原來的真實DOM。原本只需要刪除真實DOM中第一個元素的操作,會變成新建、替換后續(xù)所有真實DOM,造成性能的極大浪費

總結(jié)

到此這篇關(guān)于Vue基礎(chǔ)教程之條件渲染和列表渲染的文章就介紹到這了,更多相關(guān)Vue條件渲染和列表渲染內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue自定義指令實現(xiàn)僅支持輸入數(shù)字和浮點型的示例

    vue自定義指令實現(xiàn)僅支持輸入數(shù)字和浮點型的示例

    今天小編就為大家分享一篇vue自定義指令實現(xiàn)僅支持輸入數(shù)字和浮點型的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • vue使用window.open()跳轉(zhuǎn)頁面的代碼案例

    vue使用window.open()跳轉(zhuǎn)頁面的代碼案例

    這篇文章主要介紹了vue中對window.openner的使用,vue使用window.open()跳轉(zhuǎn)頁面的代碼案例,本文通過實例代碼給大家詳細講解,需要的朋友可以參考下
    2022-11-11
  • 用Vue.extend構(gòu)建消息提示組件的方法實例

    用Vue.extend構(gòu)建消息提示組件的方法實例

    本篇文章主要介紹了用Vue.extend構(gòu)建消息提示組件的方法實例,具有一定的參考價值,有興趣的可以了解一下
    2017-08-08
  • vue如何調(diào)用瀏覽器分享功能詳解

    vue如何調(diào)用瀏覽器分享功能詳解

    這篇文章主要給大家介紹了關(guān)于vue如何調(diào)用瀏覽器分享的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Vue組件間的雙向綁定示例解析

    Vue組件間的雙向綁定示例解析

    這篇文章主要介紹了Vue組件間的雙向綁定,我們都知道當(dāng)父組件改變了某個值后,如果這個值傳給了子組件,那么子組件也會自動跟著改變,但是這是單向的,使用v-bind的方式,即子組件可以使用父組件的值,但是不能改變這個值
    2023-03-03
  • vue使用file-saver本地文件導(dǎo)出功能

    vue使用file-saver本地文件導(dǎo)出功能

    這篇文章主要介紹了vue使用file-saver本地文件導(dǎo)出,大家需要安裝xlsx和file-saver,然后創(chuàng)建localExports.js文件,具體實現(xiàn)代碼跟隨小編一起看看吧
    2022-01-01
  • 教你如何優(yōu)化?Vue.js?應(yīng)用程序

    教你如何優(yōu)化?Vue.js?應(yīng)用程序

    Vue?3引入了Composition?API,這是一套新的API用于編寫組件,作為Options?API的替代,這篇文章主要介紹了如何優(yōu)化?Vue.js?應(yīng)用程序,需要的朋友可以參考下
    2023-02-02
  • vue路由守衛(wèi)及路由守衛(wèi)無限循環(huán)問題詳析

    vue路由守衛(wèi)及路由守衛(wèi)無限循環(huán)問題詳析

    這篇文章主要給大家介紹了關(guān)于vue路由守衛(wèi)及路由守衛(wèi)無限循環(huán)問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Vue2 監(jiān)聽屬性改變watch的實例代碼

    Vue2 監(jiān)聽屬性改變watch的實例代碼

    今天小編就為大家分享一篇Vue2 監(jiān)聽屬性改變watch的實例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • 如何用vue3+Element?plus實現(xiàn)一個完整登錄功能

    如何用vue3+Element?plus實現(xiàn)一個完整登錄功能

    要實現(xiàn)用戶的登錄功能,可以使用Vue3和Element?Plus,下面這篇文章主要給大家介紹了關(guān)于如何基于Vue3和Element?Plus組件庫實現(xiàn)一個完整的登錄功能,文中提供了詳細的代碼示例,需要的朋友可以參考下
    2023-10-10

最新評論