归纳vue的基本知识(二)

109 阅读2分钟

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

永远不要把 v-if 和 v-for 同时用在同一个元素上。

vue2:v-for的优先级比v-if高,每次循环都会去执行一次v-if

vue3:v-if的优先级高于v-for 一般我们在两种常见的情况下会倾向于这样做:

  • 为了过滤一个列表中的项目 (比如 v-for="user in users" v-if="user.isActive")。在这种情形下,请将 users 替换为一个计算属性 (比如 activeUsers),让其返回过滤后的列表。
  • 为了避免渲染本应该被隐藏的列表 (比如 v-for="user in users" v-if="shouldShowUsers")。这种情形下,请将 v-if 移动至容器元素上 (比如 ulol)。

v-for中key的作用是什么?

  1. key的作用主要是为了更高效的更新虚拟DOM。
  2. vue过程中判断两个节点是否是相同节点是key是一个必要条件,渲染一组列表时,key往往是唯一标识,所以如果不定义key的话,vue只能认为比较的两个节点是同一个,哪怕它们实际上不是,这导致了频繁更新元素,使得整个过程比较低效,影响性能。
  3. 实际使用中在渲染一组列表时key必须设置,而且必须是唯一标识,应该避免使用数组索引作为key,这可能导致一些隐蔽的bug;vue中在使用相同标签元素过渡切换时,也会使用key属性,其目的也是为了让vue可以区分它们,否则vue只会替换其内部属性而不会触发过渡效果。
  4. 从源码中可以知道,vue判断两个节点是否相同时主要判断两者的key和元素类型等,因此如果不设置key,它的值就是undefined,则可能永远认为这是两个相同节点,只能去做更新操作,这造成了大量的dom更新操作,明显是不可取的。

v-if和v-show有什么不一样的呢?

1.v-if是通过控制dom元素的生成和删除来实现。

2.v-show是通过控制dom元素的css样式来实现,实际上还存在于DOM树中。