vue2 到 vue3 的升级

461 阅读2分钟

vue2 Options 与 vue3 Composition

Options API

vue2中如何组织代码的:我们会在一个vue文件中data,methods,computed,watch中定义属性和方法,共同处理页面逻辑

缺点: 一个功能往往需要在不同的vue配置项中定义属性和方法,比较分散,项目小还好,清晰明了,但是项目大了后,一个methods中可能包含很多个方法,往往分不清哪个方法对应着哪个功能

优点:新手入门会比较简单

Composition API

在vue3 Composition API 中,代码是根据逻辑功能来组织的,一个功能的所有api会放在一起(高内聚,低耦合),这样做,即时项目很大,功能很多,我们都能快速的定位到这个功能所用到的所有API,而不像vue2 Options API 中一个功能所用到的API都是分散的,需要改动,到处找API的过程是很费时间的

缺点:学习成本可能会增加,以前的思维方式也要转变

优点:Composition API 是根据逻辑相关性组织代码的,提高可读性和可维护性,基于函数组合的 API 更好的重用逻辑代码(在vue2 Options API中通过Mixins重用逻辑代码,容易发生命名冲突且关系不清)

此处引用动画来直观感受一下吧 ~ image.png

diff 升级

Vue2.x 的核心Diff算法采用了双端比较的算法,同时从新旧children的两端开始进行比较,借助key值找到可复用的节点,再进行相关操作。相比React的Diff算法,同样情况下可以减少移动节点次数,减少不必要的性能损耗,更加的优雅

Vue3.x 借鉴了 ivi算法和 inferno算法。在创建VNode时就确定其类型,以及在mount/patch的过程中采用位运算来判断一个VNode的类型,在这个基础之上再配合核心的Diff算法,使得性能上较Vue2.x有了提升。(实际的实现可以结合Vue3.x源码看,该算法中还运用了动态规划的思想求解最长递归子序列)

vue3 新增

setup() 函数

它为基于 Composition API 的新特性提供了统一的入口。 在Vue3中,定义 methods、watch、computed、data数据 等都放在了 setup() 函数中

  1. 执行时机

setup()函数会在created()生命周期之前执行。

  1. 接收props数据

setup() 函数的第一个参数是 props ,组件接收的 props 数据可以在 setup() 函数内访问到。

setup(props) {
    console.log(props.p1)
}

  1. context上下文对象

context 是 setup() 的第二个参数,它是一个上下文对象,可以通过 context 来访问Vue的实例 this 。

setup(props,context) {
    console.log(this)
    console.log(context)
}

注意:在 setup() 函数中访问不到Vue的 this 实例

参考资料: v3.cn.vuejs.org/guide/intro…