vue3 key Attribute 的变化

key Attribute

为啥VUE3key的可以写在Tempale 

vue 3中的key属性可以在模板中直接使用的原因是Vue 3对模板编译进行了优化,使得模板中的静态节点可以被标记并跳过不必要的更新操作。在Vue 3中,key属性被用于标识列表中的每个节点,以便在列表发生变化时,Vue 可以更高效地更新和重用节点。

相比之下,Vue 2中的模板编译方式不同,模板中的所有内容都会参与渲染过程,包括静态节点。因此,在Vue 2中,将key属性直接写在模板中是没有意义的,因为模板中的内容会被完全渲染。

总结来说,Vue 3对模板编译进行了优化,使得模板中的静态节点可以被跳过不必要的更新操作,而Vue 2中的模板编译方式不支持这种优化。所以,在Vue 3中,你可以将key属性写在模板中,而在Vue 2中则不可以。

在Vue 3中,模板编译器会对模板进行静态分析,将模板中的静态节点和动态节点分开处理。静态节点是指在编译时就已经确定的节点,例如纯文本、静态标签等,而动态节点是指需要在运行时才能确定的节点,例如表达式、指令等。

对于静态节点,Vue 3会将它们标记为“hoisted”,即将它们提升到渲染函数的外部,避免在每次渲染时都重新创建这些节点。这样可以大大提高渲染性能。

在列表渲染中,Vue 3会根据key属性的值来判断列表中的每个节点是否发生了变化。如果两个节点的key值相同,Vue 会认为它们是同一个节点,直接复用旧节点,避免重新创建和销毁节点,提高渲染性能。

因此,在Vue 3中,将key属性写在模板中是有意义的,因为模板中的静态节点可以被标记并跳过不必要的更新操作,而key属性可以用于标识列表中的每个节点,以便在列表发生变化时,Vue 可以更高效地更新和重用节点。

相比之下,在Vue 2中,模板中的所有内容都会参与渲染过程,包括静态节点。因此,在Vue 2中,将key属性直接写在模板中是没有意义的,因为模板中的内容会被完全渲染。

概览

  • 新增:对于 v-if/v-else/v-else-if 的各分支项 key 将不再是必须的,因为现在 Vue 会自动生成唯一的 key
    • 非兼容:如果你手动提供 key,那么每个分支必须使用唯一的 key。你将不再能通过故意使用相同的 key 来强制重用分支。
  • 非兼容