vue中v-if和v-for一起使用的弊端及解決辦法(同時(shí)使用 v-if 和 v-for不推薦)
vue中v-if和v-for一起使用的弊端及解決辦法
同時(shí)使用 v-if 和 v-for 是不推薦的,因?yàn)檫@樣二者的優(yōu)先級(jí)不明顯。
當(dāng) v-if 和 v-for 同時(shí)存在于一個(gè)元素上的時(shí)候,v-if 會(huì)首先被執(zhí)行。這意味著 v-if 的條件將無法訪問到 v-for 作用域內(nèi)定義的變量別名:
<!--
這會(huì)拋出一個(gè)錯(cuò)誤,因?yàn)閷傩?todo 此時(shí)
沒有在該實(shí)例上定義
-->
<li v-for="todo in todos" v-if="!todo.isComplete">
{{ todo.name }}
</li>在外新包裝一層 <template> 再在其上使用 v-for 可以解決這個(gè)問題 (這也更加明顯易讀):
<template v-for="todo in todos">
<li v-if="!todo.isComplete">
{{ todo.name }}
</li>
</template>否則v-for比v-if優(yōu)先級(jí)高,如果遍歷的數(shù)組元素個(gè)數(shù)比較多,但是滿足v-if條件比較少的情況下,會(huì)浪費(fèi)性能,建議不要使用。而且,每次刷新頁面時(shí),都會(huì)執(zhí)行這樣性能不高的代碼。
如果v-if在v-for里面的話, 可以用計(jì)算屬性computed解決,通過數(shù)組方法filter過濾數(shù)組,v-for直接循環(huán)計(jì)算屬性的結(jié)果,就不需要使用v-if了。而且computed是有緩存的,就是在它的依賴沒有變化時(shí),不會(huì)再執(zhí)行對(duì)應(yīng)計(jì)算屬性的函數(shù),就提高了性能。
如果v-if在v-for外層的話,可以使用<template>標(biāo)簽。
v-if和v-for不能一起使用的原因以及解決辦法
原因:
由于v-for的優(yōu)先級(jí)比v-if高,所以導(dǎo)致每循環(huán)一次就會(huì)去v-if一次,而v-if是通過創(chuàng)建和銷毀dom元素來控制元素的顯示與隱藏,所以就會(huì)不停的去創(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 只能放在同一級(jí)標(biāo)簽中,使用計(jì)算屬性進(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 的報(bào)錯(cuò)。
到此這篇關(guān)于vue中v-if和v-for一起使用的弊端及解決辦法的文章就介紹到這了,更多相關(guān)vue中v-if和v-for使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue實(shí)現(xiàn)星級(jí)評(píng)價(jià)效果實(shí)例詳解
這篇文章主要介紹了Vue實(shí)現(xiàn)星級(jí)評(píng)價(jià)效果的實(shí)例代碼,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
vue路由跳轉(zhuǎn)攜帶參數(shù)的方式總結(jié)
我們知道在vue中每個(gè)頁面都需要在路由中聲明,下面這篇文章主要給大家介紹了關(guān)于vue路由跳轉(zhuǎn)攜帶參數(shù)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10
vue-cli2與vue-cli3在一臺(tái)電腦共存的實(shí)現(xiàn)方法
這篇文章主要介紹了vue-cli2與vue-cli3在一臺(tái)電腦共存的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Vue3?localStorage讀取數(shù)組并賦值的問題及解決
這篇文章主要介紹了Vue3?localStorage讀取數(shù)組并賦值的問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-06-06
使用vue-cli創(chuàng)建vue項(xiàng)目介紹
這篇文章介紹了使用vue-cli創(chuàng)建vue項(xiàng)目的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-01-01
Vue中狀態(tài)管理器(vuex)詳解以及實(shí)際應(yīng)用場景
Vuex是一個(gè)專為Vue.js應(yīng)用程序開發(fā)的狀態(tài)管理模式,下面這篇文章主要給大家介紹了關(guān)于Vue中狀態(tài)管理器(vuex)詳解以及實(shí)際應(yīng)用場景的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11
vue3父子通信ref,toRef,toRefs使用實(shí)例詳解
這篇文章主要介紹了vue3父子通信ref,toRef,toRefs使用實(shí)例詳解,分別介紹了ref是什么、toRef是什么及toRefs是什么和最佳使用方式,結(jié)合示例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下2023-10-10
vue 實(shí)現(xiàn)websocket發(fā)送消息并實(shí)時(shí)接收消息
這篇文章主要介紹了vue 實(shí)現(xiàn)websocket發(fā)送消息并實(shí)時(shí)接收消息,項(xiàng)目結(jié)合vue腳手架和websocket來搭建,本文給大家分享實(shí)例代碼,需要的朋友可以參考下2019-12-12

