vue3.0的变化

9月30日,尤雨溪在medium我的博客上发布了vue3.0的开发思路,国内有翻译的版本,见文章最后的参考连接。3.0带了了很大的变化,他讲了一些改进的思路以及整个开发流程的规划。html

vue3.0的改进思路

vue最主要的特色就是响应式机制、模板、以及对象式的组件声明语法,而3.0对这三部分都作了更改。vue

clipboard.png

1.响应式

2.x的响应式是基于Object.defineProperty实现的代理,兼容主流浏览器和ie9以上的ie浏览器,可以监听数据对象的变化,可是监听不到对象属性的增删、数组元素和长度的变化,同时会在vue初始化的时候把全部的[Observer],可以实现视图与数据的响应式更新,底层全凭observer的支持。)[1]都创建好,才能观察到数据对象属性的变化。 1124618109-58a55e0c03354_articlex针对上面的问题,3.0进行了革命性的变动,采用了ES2015的Proxy来代替Object.defineProperty,能够作到监听对象属性的增删和数组元素和长度的修改,还能够监听Map、Set、WeakSet、WeakMap,同时还实现了惰性的监听,不会在初始化的时候建立全部的Observer,而是会在用到的时候才去监听。可是,虽然主流的浏览器都支持Proxy,ie系列却仍是不兼容,因此针对ie11,vue3.0决定作单独的适配,暴露出来的api同样,可是底层实现仍是Object.defineProperty,这样致使了ie11仍是有2.x的问题。可是绝大部分状况下,3.0带来的好处已经可以体验到了。 响应式方面,vue3.0作了实现机制的变动,采用ES2015的Proxy,不但解决了vue2.x中的问题,仍是得性能有了进一步提高。虽然有一些兼容问题,可是经过适配的方式解决掉了。此外,还暴露了observable的api来建立响应式对象,能够替代掉event bus,来作一些跨组件的通讯。react

2.模板

模板方面没有大的变动,只改了做用域插槽,2.x的机制致使做用域插槽变了,父组件会从新渲染,而3.0把做用于插槽改为了函数的方式,这样只会影响子组件的从新渲染,提高了渲染的性能。
同时,对于render函数的方面,vue3.0也会进行一系列更改来方便习惯直接使用api来生成vdom的开发者typescript

3.对象式的组件声明方式

vue2.x中的组件是经过声明的方式传入一系列option,和TypeScript的结合须要经过一些装饰器的方式来作,虽然能实现功能,可是比较麻烦。
3.0修改了组件的声明方式,改为了类式的写法,这样使得和TypeScript的结合变得很容易。
此外,vue的源码也改用了TypeScript来写。其实当代码的功能复杂以后,必须有一个静态类型系统来作一些辅助管理,如React使用的Flow,Angular使用的TypeScript。如今vue3.0也全面改用TypeScript来重写了,更是使得对外暴露的api更容易结合TypeScript。静态类型系统对于复杂代码的维护确实颇有必要。segmentfault

其余的一些东西

vue3.0的改变是全面的,上面只涉及到主要的3个方面,还有一些其余的更改:api

支持自定义渲染器,从而使得weex能够经过自定义渲染器的方式来扩展,而不是直接fork源码来改的方式。
支持Fragment(多个根节点)和Protal(在dom其余部分渲染组建内容)组件,针对一些特殊的场景作了处理。
基于treeshaking优化,提供了更多的内置功能。数组

vue3.0的开发流程规划

vue的开发思路是公开的,尤雨溪说主要的特性会听取一些主要库的开发者的反馈,有比较肯定的方案之后公布RFC收集公众的反馈意见,以后才进入开发,同时会同步生态内相关的库和工具的更新。
虽然vue不如react和angular那样有大公司维护,可是借助开源的力量,整个流程都是开源社区参与的,这样vue的稳定程度和开发思路天然也就不会有什么大的问题。浏览器

总结

vue3.0对vue的主要3个特色:响应式、模板、对象式的组件声明方式,进行了全面的更改,底层的实现和上层的api都有了明显的变化,基于Proxy从新实现了响应式,基于treeshaking内置了更多功能,提供了类式的组件声明方式。并且源码所有用typescript重写。以及进行了一系列的性能优化。
参考连接:性能优化

重磅!尤雨溪发布Vue 3.0开发路线weex

相关文章
相关标签/搜索