Skip to content
On this page

v-if 和 v-for 优先级

给出结论

在vue2中v-for的优先级高于v-if,在vue3中v-if的优先级高于v-for

为什么是这样的,说出细节

官方文档

Vue3官方文档

v-for

Vue2官方文档

v-for

这是在两个版本的官方文档中特别注意事项中标明的内容,而且v-for 和 v-if 是不能放在一起使用的。

从源码中也可以看出

vue2

v-for

vue2中从输出的渲染函数中可以看出是 先执行循环 再判断条件,哪怕是只渲染列表中一部分元素,那也得再每次重新渲染的时候都要遍历整个列表,这样比较浪费。

vue3

在vue3中 v-if的优先级高于v-for,v-if 是无法访问到v-for作用域内定义的变量

哪些场景可能导致我们要这么做,该如何处理

在实际使用过程中,常有这样的需求导致想要v-for和v-if一起用

一个是过滤列表项,另一个就是为了避免渲染要被隐藏的列表

更好的解决方案,第一个是通过计算属性把需要过滤的列表项先计算出来在v-for, 第二个就是v-if 作用于 v-for 的父组件上

Released under the MIT License.