久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      vue中v-if和v-for哪個(gè)優(yōu)先級(jí)高

      在vue2中,v-for的優(yōu)先級(jí)高于v-if;在vue3中,v-if的優(yōu)先級(jí)高于v-for。在vue中,永遠(yuǎn)不要把v-if和v-for同時(shí)用在同一個(gè)元素上,會(huì)帶來性能方面的浪費(fèi)(每次渲染都會(huì)先循環(huán)再進(jìn)行條件判斷);想要避免出現(xiàn)這種情況,可在外層嵌套template(頁面渲染不生成dom節(jié)點(diǎn)),在這一層進(jìn)行v-if判斷,然后在內(nèi)部進(jìn)行v-for循環(huán)。

      vue中v-if和v-for哪個(gè)優(yōu)先級(jí)高

      本教程操作環(huán)境:windows7系統(tǒng)、vue3版,DELL G3電腦。

      v-if指令用于條件性地渲染一塊內(nèi)容。指令用于條件性地渲染一塊內(nèi)容。這塊內(nèi)容只會(huì)在指令的表達(dá)式返回 true值的時(shí)候被渲染。
      v-for指令基于一個(gè)數(shù)組來渲染一個(gè)列表。v-for指令需要使用item in items形式的特殊語法,其中items是源數(shù)據(jù)數(shù)組或者對(duì)象,而item則是被迭代的數(shù)組元素的別名。

      v-for的時(shí)候,建議設(shè)置key值,并且保證每一個(gè)key值都是獨(dú)一無二的,這便是diff算法進(jìn)行優(yōu)化。

      <Modal v-if="isShow" />  <li v-for="item in items" :key="item.id">     {{ item.label }} </li>

      優(yōu)先級(jí)

      其實(shí)在vue2和vue3中的答案是截然相反的。

      • 在vue2中,v-for的優(yōu)先級(jí)高于v-if

      • 在vue3中,v-if的優(yōu)先級(jí)高于v-for

      vue中v-if和v-for哪個(gè)優(yōu)先級(jí)高

      vue2中的v-for和v-if

      v-ifv-for都是vue模板系統(tǒng)中的指令。

      vue模板編譯的時(shí)候,會(huì)將指令系統(tǒng)轉(zhuǎn)化為可執(zhí)行的render函數(shù)。

      編寫一個(gè)p標(biāo)簽,同時(shí)使用v-ifv-for

      <div id="app">     <p v-if="isShow" v-for="item in items">         {{ item.title }}     </p> </div>

      創(chuàng)建vue示例,存放isShowitems數(shù)據(jù)。

      const app = new Vue({   el: "#app",   data() {     return {       items: [         { title: "foo" },         { title: "baz" }]     }   },   computed: {     isShow() {       return this.items && this.items.length > 0     }   } })
      ? anonymous() {   with (this) { return      _c('div', { attrs: { "id": "app" } },      _l((items), function (item)      { return (isShow) ? _c('p', [_v("n" + _s(item.title) + "n")]) : _e() }), 0) } }

      _lvue的列表渲染函數(shù),函數(shù)內(nèi)部都會(huì)進(jìn)行一次if判斷。
      初步得到結(jié)論:v-for優(yōu)先級(jí)是比v-if高。
      再將v-forv-if置于不同標(biāo)簽

      <div id="app">     <template v-if="isShow">         <p v-for="item in items">{{item.title}}</p>     </template> </div>

      再輸出下render函數(shù)

      ? anonymous() {   with(this){return      _c('div',{attrs:{"id":"app"}},     [(isShow)?[_v("n"),     _l((items),function(item){return _c('p',[_v(_s(item.title))])})]:_e()],2)} }

      這時(shí)候我們可以看到,v-forv-if作用在不同標(biāo)簽時(shí)候,是先進(jìn)行判斷,再進(jìn)行列表的渲染。

      export function genElement (el: ASTElement, state: CodegenState): string {   if (el.parent) {     el.pre = el.pre || el.parent.pre   }   if (el.staticRoot && !el.staticProcessed) {     return genStatic(el, state)   } else if (el.once && !el.onceProcessed) {     return genOnce(el, state)   } else if (el.for && !el.forProcessed) {     return genFor(el, state)   } else if (el.if && !el.ifProcessed) {     return genIf(el, state)   } else if (el.tag === 'template' && !el.slotTarget && !state.pre) {     return genChildren(el, state) || 'void 0'   } else if (el.tag === 'slot') {     return genSlot(el, state)   } else {     // component or element     ... }

      在進(jìn)行if判斷的時(shí)候,v-for是比v-if先進(jìn)行判斷。

      最終v-for優(yōu)先級(jí)比v-if高。

      vue3中的v-for和v-if

      在vue3中,v-if的優(yōu)先級(jí)高于v-fo,所以v-if執(zhí)行時(shí),它調(diào)用的變量還不存在,就會(huì)導(dǎo)致異常

      說明:通常有兩種情況下導(dǎo)致我們這樣做:

      1.為了過濾列表中的項(xiàng)目,比如:

      v-for="user in users" v-if="user.isActive"
      • 在vue2中,把它們放在一起,輸出的渲染函數(shù)中可以看出會(huì)先執(zhí)行循環(huán)再判斷條件,哪怕我們只渲染列表中一小部分元素,也得在每次重渲染的時(shí)候遍歷整個(gè)列表,這會(huì)比較浪費(fèi)
      • 在vue3中,v-if的優(yōu)先級(jí)高于v-fo,所以v-if執(zhí)行時(shí),它調(diào)用的變量還不存在,就會(huì)導(dǎo)致異常

      此時(shí)定義一個(gè)計(jì)算屬性(比如 activeUsers),讓其返回過濾后的列表即可(比如users.filter(u=>u.isActive))。

      2.為了避免渲染本應(yīng)該被隱藏的列表

      v-for="user in users" v-if="shouldShowUsers"
      • 同樣,在vue2中,把它們放在一起,輸出的渲染函數(shù)中可以看出會(huì)先執(zhí)行循環(huán)再判斷條件,哪怕我們只渲染列表中一小部分元素,也得在每次重渲染的時(shí)候遍歷整個(gè)列表,這會(huì)比較浪費(fèi)
      • 在vue3中,這樣寫雖然并不會(huì)報(bào)錯(cuò),但是官方還是及其不推薦外面這樣去做

      此時(shí)把v-if移動(dòng)至容器元素上(比如ulol)或者外面包一層template即可。

      注意事項(xiàng)

      永遠(yuǎn)不要把 v-if 和 v-for 同時(shí)用在同一個(gè)元素上,帶來性能方面的浪費(fèi)(每次渲染都會(huì)先循環(huán)再進(jìn)行條件判斷)

      • 如果避免出現(xiàn)這種情況,則在外層嵌套template(頁面渲染不生成dom節(jié)點(diǎn)),在這一層進(jìn)行v-if判斷,然后在內(nèi)部進(jìn)行v-for循環(huán)

      <template v-if="isShow">     <p v-for="item in items"> </template>
      • 如果條件出現(xiàn)在循環(huán)內(nèi)部,可通過計(jì)算屬性computed提前過濾掉那些不需要顯示的項(xiàng)

      computed: {     items: function() {       return this.list.filter(function (item) {         return item.isShow       })     } }

      【相關(guān)視頻教程推薦:vuejs入門教程、web前端入門】

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)