VUE3.0新特性及与2.X的区别

1,392 阅读2分钟

vue3.0完全兼容vue2.x版本

VUE3.0六大亮点:

1、性能比2.x快1.2~2倍
2、按需编译,体积比2.x更小
3、新出组合API(类似React Hooks)
4、更好支持TypeScript
5、暴露了自定义渲染API
6、更先进的组件

1、新的创建方式

3.0新增了Vite的方式创建项目,使用npm init vite-app <项目名> 即可,不过得预先装vue3.0。这种方式比vue-cli脚手架更快更轻量。Vite原理是利用ES6的import发送请求去加载文件的特性

2、性能优化四点

①diff算法优化

2.0的diff算法在更新时,会将虚拟DOM重新渲染,而3.0在创建虚拟DOM的时候会根据DOM中的内容会不会发生变化来添加静态标记(PathFlags),只有有静态标记才会进行重新渲染,这样会增强性能。

②hoistStatic静态提升

2.x中不论元素是否更新都会创建,3.0中只会创建变化的,而不变的会使用旧有的元素。

③事件侦听缓存

对于click之类的事件在2.x中每次执行都会去追踪变化,3.0中添加了事件侦听缓存,使相同事件缓存起来,增快运行速度。

vue-next-template-explorer.netlify.app  //vue3.0源码对照地址

④ssr渲染

3、组合API-setup

在3.0中与data同级增加了setup,setup函数是 Composition API(组合API)的入口,函数生命周期在beforeCreate生命周期之前执行。所以函数内无法使用this,data和methods等。

在setup中可以将变量函数方法生命周期都写在内。这样可以使同一功能函数的所有代码都在一个函数体内,项目结构更清晰更易维护。

在setup函数中定义的变量和方法最后都是需要 return 出去的 不然无法再模板中使用。但本质是将return暴露出去的数据注入到data中,将方法注入到methods中。

setup中的内容必须是同步的,要使用异步必须自定义customRef函数。

4、响应式原理的区别

vue2的响应式是defineProperty实现的,在defineProperty通过set设置数据,get监听数据,然后反馈到watch引起页面响应渲染。

vue3响应式数据是通过ES6的Proxy来实现的,将数据包装成proxy对象,对象里set设置数据,get监听数据。