这两天有个面试,看了一下岗位要求,其中有一条是熟悉Vue3
,而我最近2年一直在做Next.js
相关项目,对Vue3
没怎么关注过,所以赶紧来读一下官方文档。
声明:之前有多年使用Vue2
经验,但最新的3
文档还没看过,更没有实践经验。
响应式系统
响应式系统使得数据的变化能够自动更新到视图中。其核心思想是基于数据劫持和发布-订阅模式来实现在访问数据时收集依赖该数据的对象(watcher对象),在数据修改的时候通知 watcher 对象更新 UI。
响应式
这三个字令人印象深刻,因为它在新版本文档中的提及率实在太高,这一下就勾起以往的记忆,它不是什么新功能,它是 Vue 的核心特性,Vue 框架的基石。显然核心思想是不会变的,不过基于核心思想的实现还有有一点变化,在版本2中监听对象属性的变化使用Object.defineProperty
方法,版本3中则新增了基于ES6的Proxy
特性的实现对象变化的深层监听
。
当层级较深且数据量大的时候,使用Object.defineProperty
进行对象属性监听,这非常耗性能,会导致白屏时间长。Vue3 中不仅提供了性能更好的 Proxy 监听方案,开发者还可以根据实际需求选择浅层监听
。
组合式 API
我理解的组合式 API 是响应式系统的工具化,即将实现响应式系统逻辑打散包装,以 API 的方式暴露给开发者,像数据劫持,订阅、watch、生命周期等都以 API 形式提供给开发者,所以开发者可以像搭积木一样去组织自己的代码,实现业务逻辑。
组合式API
真的让我眼前一亮,Vue2 很不错,它帮开发者干了有所它能干事情,开发者只要按照范式开发就好了,的确它足够简单,上手快,同时这导致基于 Vue2 的项目千篇一律(不一定是坏事)。那么它的缺点是留给开发者的自由度很少,开发者很难去深入、更多的去创造。组合式API恰恰解决了这个问题。
由于有了新的开发模式,文档中将老的开发范式称为选项式
,而且文档中很明确:选项式 API 是在组合式 API 的基础上实现的,意思就是,官方在组合式 API 的基础上实现了一种通用范式,Vue2 就是这种范式。选贤式一样能实现功能,而且还很统一,为什么还要用组合式,
,因为组合式有选项式所不具备的能力,逻辑复用,官方文档中叫组合式函数
,有点类似于 React 中 hook,利用组合式 API 可以更好的代码重用,提高了代码的维护性和可读性。
模块化 + TypeScript 支持
Vue3 没有历史包袱,全面拥抱了 ESM + TypeScript, 所以TypeScript 与 Vue 结合更加顺畅。
新特性
- 异步组件(defineAsyncComponent)结合 ES 模块动态导入使用。
- Teleport 组件
- Suspense 组件 和 react 中 Suspense 概念类似,可以结合异步组件使用。
- 全局错误处理
一些思考
只是粗略看了一点新版文档,由衷感叹 Vue3 真的很优秀,连文档都比老版好很多,新版文档中很多地方都提及响应式系统,甚至很深入的介绍它,而老版更多的是 API 的介绍,这是升级的结果,升级不是简单数字的 +1,而是能力的提升,对于大型复杂项目,Vue3 更能胜任。
对前端开发者来讲也是如此,Vue2 简单易上手,但时间长了,开发者容易麻木,不利于开发者去思考背后的逻辑,更谈不上能力提升了,特别是前端开发相对其他工种计算机基础更弱一点,非科班出身的从业者多,如果不能结合实践去学习软件、计算机知识,单纯硬学,只会更难。但是如果从前端工作本身去研究,就可以接触到一些概念,像设计模式、基本的数据结构,一些简单算法,从自己能接触到的简单应用案例去研究效果会更好。
Vue3 对前端开发者要求显然会高一点,组合式API 把选择权交给了你,你必需对 Vue 背后的实现模型有充分的了解,才能胜任。所以Vue3 对广大从业者也是一个契机,去发现、去了解更广阔的世界。