v-if和v-for的问题

v-if和v-for优先级哪个高?

  • v-for优先级高于v-if
  • 同时出现时,每次渲染都会先执行循环,在再循环中执行判断,造成性能浪费。
  • 因此不要把 v-if 和 v-for 同时用在同一个元素上。

同时出现如何优化才能得到更好的性能?

  • 在外层或嵌套<block>,先进行v-if判断,然后再v-for循环
<ul v-if="isShowGoods">
  <li
    v-for="goods in goodsList"
    :key="goods.id"
  >
    {{ goods.name }}
  </li>
</ul>
  • 无法先进行v-if判断的,可以进行数据处理,替换为一个计算属性 ,返回过滤筛选后的列表。
<ul>
  <li
    v-for="goods in activeGoodsList"
    :key="goods.id"
  >
    {{ goods.name }}
  </li>
</ul>
computed: {
  activeGoodsList: function () {
    return this goodsList.filter(function (goods) {
      return goods.isActive
    })
  }
}