您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Vue中條件渲染和列表渲染的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
什么是條件渲染?在我們的頁面中會有很多這樣的應用場景,比如說我們今天要上架一個活動,這個活動頁面只在今天有效,在晚上的24點或者說在明天早上凌晨0點1秒的時候就要把這個頁面下下來,把這個圖片隱藏掉。如果我們安排一個運維兄弟手動去改HTML,那么運維兄弟就會瘋掉的,其實這里就會有一個很簡單的辦法,就是條件的渲染,即當0點的時候我們去判斷這個條件,如果這個條件達到了比如說24點或者是0點一個時間點,之后就把它隱藏起來,這個就是一個條件的渲染。
什么是列表渲染呢?這個就是最常見的,比如說在頁面上有很多個元素,很多的圖片,像新聞網站一次加載20條,如果用手敲去寫HTML,那樣新聞網站的人就不用去干活了,每天就去敲HTML代碼了,這里面就會有類似于我們C語言代碼里面的for循環那樣,有一個循環語句在這個地方,讓我們把這個頁面的元素構建出來生成出來,這就是列表渲染。1 v-if 和 v-show
都用來控制元素的顯示和隱藏
v-if控制虛擬DOM樹上元素的創建和銷毀,Vue的響應系統會根據虛擬DOM樹對實際DOM進行更新,從而間接控制實際DOM上元素的顯隱
v-show通過給元素添加樣式display:none來讓元素隱藏
v-if是惰性的,如果初始渲染條件為false,什么都不做;只有條件為true,才會開始編譯
v-show不管初始渲染條件如何,元素始終被編譯并保留,之后根據條件通過CSS切換
如果頻繁切換顯示與隱藏,v-if會頻繁創建、銷毀元素,而v-show只是切換樣式
故v-if的切換消耗更高
如果元素的顯示隱藏在一開始就定下來不會再變了,使用v-if
如果元素需要頻繁切換顯隱,使用v-show
v-if可以搭配template使用,v-show不可以
v-if可以搭配v-else,v-show無特殊語法
為什么不能把v-if和v-for同時用在同一個元素上?
當 Vue 處理指令的時候,v-for的優先級比v-if高,因此這個模板:
<ul> <li v-for="item in list" v-if="item.isActive" :key="item.id"> {{item.name}} </li> </ul>
會經過如下運算:
this.list.map(function(item) { if (item.isActive) { return item.name } })
我們每次重新渲染的時候都要遍歷整個列表,即使isActive為true的item很少,這會帶來性能方面的極大浪費,因此兩者不能同時用在同一個元素上
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>
在使用v-for進行列表渲染時,必須給元素添加一個key屬性,并且這個key必須是唯一標識
<ul> <li v-for="item in list" :key="item.id">{{item.name}}</li> </ul>
我們知道,Vue 在更新元素時,不會直接操作真實DOM(渲染真實DOM開銷是很大的),而是根據新數據生成新的虛擬 DOM,然后對新舊虛擬DOM進行差異對比,根據對比結果進行DOM操作來更新視圖
列表渲染時,如果有key屬性,由于它是唯一標識,在對比兩個新舊節點時若key不同也就沒有深入對比的必要了。
為什么不能用index作為key?因為index是不穩定可變的,比如刪除了列表第一個元素,會導致后面的元素index發生變化,從而導致key發生變化。這時,Vue 在對比新舊節點時,遇到key相同的節點,就會進行深入對比,發現節點內容發生了變化,就會去創建新的真實DOM用來替換原來的真實DOM。原本只需要刪除真實DOM中第一個元素的操作,會變成新建、替換后續所有真實DOM,造成性能的極大浪費
關于“Vue中條件渲染和列表渲染的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。