久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放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. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

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

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

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

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

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

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

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

      優(yōu)先級

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

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

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

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

      vue2中的v-for和v-if

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

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

      編寫一個p標簽,同時使用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)部都會進行一次if判斷。
      初步得到結(jié)論:v-for優(yōu)先級是比v-if高。
      再將v-forv-if置于不同標簽

      <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)} }

      這時候我們可以看到,v-forv-if作用在不同標簽時候,是先進行判斷,再進行列表的渲染。

      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     ... }

      在進行if判斷的時候,v-for是比v-if先進行判斷。

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

      vue3中的v-for和v-if

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

      說明:通常有兩種情況下導致我們這樣做:

      1.為了過濾列表中的項目,比如:

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

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

      2.為了避免渲染本應該被隱藏的列表

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

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

      注意事項

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

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

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

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

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

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