vue2和vue3的区别
- 双向数据绑定的原理不同
(1) vue2用es5的Obeject.definedProperty()的get和set做数据挟持,结合发布订阅者模式实现的 Object.definedProperty()会去遍历每一个属性,然后加上get和set,从而实现数据绑定。
(2) vue3用了es6的proxy代理的方式实现的。
- api的类型不同
(1) vue2中我们使用的是选项式api,在代码里分割了不同的属性,如data,computed,method等。
(2) vue3中我们使用的是组合式api,我们可以把一个功能的所有代码放到一块,这样子会有利于代码的维护,代码也会更简洁。
- 定义数据变量方法不同
(1) vue2中,我们的数据是放在data里面的,方法是放在method里面的,还有我们的一些watch和computed都是单独存放的。
(2) vue3中,会有一个setup函数,在这个函数里面可以使用ref或reactive来定义这个变量,定义方法也可以直接卸载setup函数中
- diff算法不同
(1) vue2中,diff算法是遍历每一个虚拟dom,进行对比,返回一个patch对象,用来存储两个节点不同的地方,用patch记录的信息去更新dom,有一个缺点就是,它会比较每一个节点,对于一些不参与更新的元素,也去进行比较了。
(2) vue3中,diff算法会给每一个虚拟dom添加一个patchflag标识,只会去比较标识发生变化的节点,进行视图更新,对于标识没有发生变化的节点,就标记为静态标记,在渲染的时候直接复用。