vue中v-if和v-for一起使用的弊端及解決辦法(同時使用 v-if 和 v-for不推薦)
vue中v-if和v-for一起使用的弊端及解決辦法
同時使用 v-if 和 v-for 是不推薦的,因為這樣二者的優(yōu)先級不明顯。
當(dāng) v-if 和 v-for 同時存在于一個元素上的時候,v-if 會首先被執(zhí)行。這意味著 v-if 的條件將無法訪問到 v-for 作用域內(nèi)定義的變量別名:
<!-- 這會拋出一個錯誤,因為屬性 todo 此時 沒有在該實例上定義 --> <li v-for="todo in todos" v-if="!todo.isComplete"> {{ todo.name }} </li>
在外新包裝一層 <template> 再在其上使用 v-for 可以解決這個問題 (這也更加明顯易讀):
<template v-for="todo in todos"> <li v-if="!todo.isComplete"> {{ todo.name }} </li> </template>
否則v-for比v-if優(yōu)先級高,如果遍歷的數(shù)組元素個數(shù)比較多,但是滿足v-if條件比較少的情況下,會浪費性能,建議不要使用。而且,每次刷新頁面時,都會執(zhí)行這樣性能不高的代碼。
如果v-if在v-for里面的話, 可以用計算屬性computed解決,通過數(shù)組方法filter過濾數(shù)組,v-for直接循環(huán)計算屬性的結(jié)果,就不需要使用v-if了。而且computed是有緩存的,就是在它的依賴沒有變化時,不會再執(zhí)行對應(yīng)計算屬性的函數(shù),就提高了性能。
如果v-if在v-for外層的話,可以使用<template>標(biāo)簽。
v-if和v-for不能一起使用的原因以及解決辦法
原因:
由于v-for的優(yōu)先級比v-if高,所以導(dǎo)致每循環(huán)一次就會去v-if一次,而v-if是通過創(chuàng)建和銷毀dom元素來控制元素的顯示與隱藏,所以就會不停的去創(chuàng)建和銷毀元素,造成頁面卡頓,性能下降
解決方案:
第一種:將 v-if 和 v-for 分別放在不同標(biāo)簽中
<ul v-if="active"> <li v-for="(item, index) in list" :key="inde"> <p>{{item.name}}</p> </li> </ul>
第二種:如果 v-if 和 v-for 只能放在同一級標(biāo)簽中,使用計算屬性進(jìn)行改造:
let title = "自定義" <ul v-for="(item, index) in lists(list, title)" :key="index"> <li>{{item.name}}</li> </ul>
computed: { lists () { return (item, name) => { return item.filter(item => item.name !== name) } } }
以上兩種方法都可以解決 eslint 的報錯。
到此這篇關(guān)于vue中v-if和v-for一起使用的弊端及解決辦法的文章就介紹到這了,更多相關(guān)vue中v-if和v-for使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue3第二次傳遞數(shù)據(jù)方法無法獲取到最新的值的解決方法
這篇文章主要介紹了vue3第二次傳遞數(shù)據(jù)方法無法獲取到最新的值,本文通過實例圖文相結(jié)合給大家詳細(xì)講解,感興趣的朋友一起看看吧2025-04-04Ant Design Vue全局對話確認(rèn)框(confirm)的回調(diào)不觸發(fā)
這篇文章主要介紹了Ant Design Vue全局對話確認(rèn)框(confirm)的回調(diào)不觸發(fā)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07記一次Vue.js混入mixin的使用(分權(quán)限管理頁面)
這篇文章主要介紹了記一次Vue.js混入mixin的使用(分權(quán)限管理頁面),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-04-04詳解vuejs中執(zhí)行npm run dev出現(xiàn)頁面cannot GET/問題
這篇文章主要介紹了詳解vuejs中執(zhí)行npm run dev出現(xiàn)頁面cannot GET/問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04