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

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

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

前言

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

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

1.1 作用

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

1.2 控制元素顯隱的方式

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

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

1.3 初始渲染對(duì)比

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

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

1.4 切換消耗對(duì)比

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

故v-if的切換消耗更高

1.5 使用場景對(duì)比

如果元素的顯示隱藏在一開始就定下來不會(huì)再變了,使用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 不能同時(shí)用的原因

為什么不能把v-if和v-for同時(shí)用在同一個(gè)元素上?

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

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

會(huì)經(jīng)過如下運(yùn)算:

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

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

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

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

<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、如果想過濾列表中的項(xiàng)目,可以使用計(jì)算屬性(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進(jìn)行列表渲染時(shí),必須給元素添加一個(gè)key屬性,并且這個(gè)key必須是唯一標(biāo)識(shí)

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

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

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

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

總結(jié)

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

相關(guān)文章

  • vue3使用vue-router及路由權(quán)限攔截方式

    vue3使用vue-router及路由權(quán)限攔截方式

    這篇文章主要介紹了vue3使用vue-router及路由權(quán)限攔截方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 詳解vue中v-model的實(shí)現(xiàn)原理

    詳解vue中v-model的實(shí)現(xiàn)原理

    v-model可以實(shí)現(xiàn)數(shù)據(jù)的雙向綁定,也是vue的最突出的優(yōu)勢,其實(shí) v-model 實(shí)際上是一個(gè)語法糖,本文將給大家介紹一下vue中v-model的實(shí)現(xiàn)原理,文中有相關(guān)的代碼供大家參考,具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-12-12
  • vue實(shí)現(xiàn)圖片上傳預(yù)覽功能

    vue實(shí)現(xiàn)圖片上傳預(yù)覽功能

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)圖片上傳預(yù)覽功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • vue.js如何處理數(shù)組對(duì)象中某個(gè)字段是否變?yōu)閮蓚€(gè)字段

    vue.js如何處理數(shù)組對(duì)象中某個(gè)字段是否變?yōu)閮蓚€(gè)字段

    這篇文章主要介紹了vue.js如何處理數(shù)組對(duì)象中某個(gè)字段是否變?yōu)閮蓚€(gè)字段方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • vue實(shí)現(xiàn)頁面自適應(yīng)的常用4種方法

    vue實(shí)現(xiàn)頁面自適應(yīng)的常用4種方法

    前端頁面自適應(yīng)有很多方法可以實(shí)現(xiàn),本文小編將為大家詳細(xì)介紹四種常用的方法,并提供相應(yīng)的代碼示例,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • 利用Vue實(shí)現(xiàn)數(shù)字翻滾動(dòng)畫效果展示

    利用Vue實(shí)現(xiàn)數(shù)字翻滾動(dòng)畫效果展示

    這篇文章主要介紹了利用Vue實(shí)現(xiàn)數(shù)字翻滾動(dòng)畫效果,通過Vue的響應(yīng)式數(shù)據(jù)更新結(jié)合CSS3的動(dòng)畫效果,我們可以實(shí)現(xiàn)非??犰诺臄?shù)字翻滾效果,給數(shù)據(jù)可視化帶來更多動(dòng)感和吸引力,需要的朋友參考下吧
    2024-04-04
  • vue中項(xiàng)目如何提交form格式數(shù)據(jù)的表單

    vue中項(xiàng)目如何提交form格式數(shù)據(jù)的表單

    這篇文章主要介紹了vue中項(xiàng)目如何提交form格式數(shù)據(jù)的表單,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 用v-html解決Vue.js渲染中html標(biāo)簽不被解析的問題

    用v-html解決Vue.js渲染中html標(biāo)簽不被解析的問題

    這篇文章主要給大家介紹了如何利用v-html解決Vue.js渲染過程中html標(biāo)簽不能被解析,html標(biāo)簽顯示為字符串的問題,文中通過圖文介紹的很詳細(xì),有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • Vue.js圖片預(yù)覽插件使用詳解

    Vue.js圖片預(yù)覽插件使用詳解

    Vue是一套用于構(gòu)建用戶界面的漸進(jìn)式框架。這篇文章主要介紹了Vue.js圖片預(yù)覽插件的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-08-08
  • vue 重塑數(shù)組之修改數(shù)組指定index的值操作

    vue 重塑數(shù)組之修改數(shù)組指定index的值操作

    這篇文章主要介紹了vue 重塑數(shù)組之修改數(shù)組指定index的值操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08

最新評(píng)論

平和县| 西平县| 怀安县| 湘潭市| 湘潭市| 大荔县| 巴东县| 陇川县| 栾城县| 利川市| 措勤县| 平舆县| 齐河县| 溆浦县| 淄博市| 谷城县| 东莞市| 瑞金市| 四川省| 普宁市| 蕉岭县| 林甸县| 苍南县| 尉犁县| 上林县| 崇明县| 皋兰县| 西青区| 甘洛县| 东山县| 类乌齐县| 东光县| 独山县| 信阳市| 运城市| 靖西县| 广西| 东台市| 洛阳市| 金阳县| 乌什县|