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)性能,建議不要使用。而且,每次刷新頁(yè)面時(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)建和銷毀元素,造成頁(yè)面卡頓,性能下降
解決方案:
第一種:將 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)文章
Vue3.0 自己實(shí)現(xiàn)放大鏡效果案例講解
這篇文章主要介紹了Vue3.0 自己實(shí)現(xiàn)放大鏡效果案例講解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07vue3第二次傳遞數(shù)據(jù)方法無法獲取到最新的值的解決方法
這篇文章主要介紹了vue3第二次傳遞數(shù)據(jù)方法無法獲取到最新的值,本文通過實(shí)例圖文相結(jié)合給大家詳細(xì)講解,感興趣的朋友一起看看吧2025-04-04Ant Design Vue全局對(duì)話確認(rèn)框(confirm)的回調(diào)不觸發(fā)
這篇文章主要介紹了Ant Design Vue全局對(duì)話確認(rèn)框(confirm)的回調(diào)不觸發(fā)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07vue3+three.js實(shí)現(xiàn)疫情可視化功能
這篇文章主要介紹了vue3+three.js實(shí)現(xiàn)疫情可視化,本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09記一次Vue.js混入mixin的使用(分權(quán)限管理頁(yè)面)
這篇文章主要介紹了記一次Vue.js混入mixin的使用(分權(quán)限管理頁(yè)面),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-04-04詳解vuejs中執(zhí)行npm run dev出現(xiàn)頁(yè)面cannot GET/問題
這篇文章主要介紹了詳解vuejs中執(zhí)行npm run dev出現(xiàn)頁(yè)面cannot GET/問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04