Vue 3 保留了绝大部分 Vue 2 的功能,但也引入了一些重要的更改。尽管 Vue 3 是向后兼容的,但某些功能可能需要调整才能正常工作。下面是一些主要的区别:
API设计
Vue 3 引入了 Composition API,它提供了一种更灵活且逻辑复用的方法。然而,Vue 3 仍然支持 Vue 2 中的 Options API,因此您可以继续使用data、methods、computed和生命周期钩子。
Vue3.0新增了Teleport API,允许开发者将组件的子元素“传送”到DOM树的其他位置,实现了更加灵活的UI布局。
Vue 3 中的ref和reactive函数已经替代了 Vue 2 中的Vue.observable。
Vue 3 中的自定义指令 API 发生了变化。现在,自定义指令需要一个具有beforeMount、mounted、beforeUpdate、updated和beforeUnmount生命周期钩子的对象,而不是在 Vue 2 中使用的bind和update函数。具体的变化可以查阅官方文档的Custom Directives部分。
Vue 3 的全局 API 发生了变化。例如,Vue.filter、Vue.mixin、Vue.set和Vue.delete在 Vue 3 中被移除。而替代方案是使用app实例的方法,如app.mixin。有关更多详细信息,请查阅Global API Treeshaking。
Vue 3 中的组件生命周期钩子有所改动。例如,Vue 2 中的beforeDestroy和destroyed钩子在 Vue 3 中分别更名为beforeUnmount和unmounted。Vue 3 还引入了新的生命周期钩子,如beforeUpdate和updated。
Vue 3 中的事件处理有所不同。.native修饰符已被移除,可以使用v-on的变体v-on:click.native。另外,.once修饰符不再保证在多个侦听器之间按顺序触发。
Vue 3 中的插槽语法发生了变化,slot和slot-scope属性已被废弃,取而代之的是v-slot指令。
性能提升
Vue 3 改进了虚拟 DOM,并重新设计了内部架构。虽然这对于大多数应用程序来说不会有很大影响,但它使 Vue 3 的性能得到了显著提高。
模版编译优化:Vue3的模版编译器也进行了优化,通过对静态节点的优化、模版缓存和增量编译等方式,使得模版的渲染更快、更稳定。
Vue3静态提升:在Vue 3中,静态提升是一种优化技术,它可以帮助Vue 3重新渲染过程更加高效。静态提升是通过分析模板来确定哪些节点是静态的,并将这些静态节点的创建提升到渲染过程的外部,从而避免在每次重渲染时重复创建这些静态节点。
Vue 3中实现静态提升的方法是使用
<static>标签包裹静态内容。然而,Vue 3的编译器会自动识别静态节点并应用静态提升,通常不需要手动进行静态提升的操作。
更好的响应式系统:Proxy替代Object.defineProperty, Vue3.0使用ES6的Proxy替代了Vue2.0中的Object.defineProperty,实现了更加精细的响应式追踪,减少了不必要的渲染。
更好的Tree shaking:更小更快的打包体积-vue3的代码更加模块化,使得打包的代码更小、更快;自动删除没有使用的代码-vue3还支持tree-shaking,可以自动删除没使用的代码,减少应用的体积。
更好的TypeScript支持:Vue3.0默认使用TypeScript进行开发,提供了更好的类型检查和IDE支持,提高了开发效率。
其他新特性
Fragment支持
Vue3.0支持Fragment语法,允许组件返回多个根节点,提高了组件的灵活性。
Suspense组件与异步组件改进
Vue3.0新增了Suspense组件和异步组件的改进,使得在加载异步组件时可以显示加载状态或占位符,提高了用户体验。