认识 Vue 3

134 阅读2分钟

认识 Vue

  • Vue (读音 /vjuː/,类似于 view) 使用与构建用户界面的 渐进式框架
    • 全程是Vue.js或者Vuejs
    • 什么是渐进式框架呢?表示我们可以在项目中一点点来引入和使用Vue,而不一定需要全部使用Vue来开发整个项目

Vue3 的变化

  • 源码通过 monorepo 的形式来管理源代码
    • Mono: 单个
    • Repo: Repository仓库
    • 主要是将许多项目的代码存储在同一个repository
    • 这样做的目的是多个包本身相互独立,可以有自己的功能逻辑、单元测试等,同时又在同一个仓库下方便管理
    • 而且模块划分的更加清晰,可维护性、可扩展性更强
  • 源码使用TypeScript来进行重写:
    • 在Vue2.x的时候,Vue使用Flow来进行类型检测;
    • 在Vue3.x的时候,Vue的源码全部使用TypeScript来进行重构,并且Vue本身对TypeScript支持也更好了

Vue3 带来的变化 (性能)

  • 使用Proxy进行数据劫持
    • 在使用 Vue.2 的时候,Vue2 使用的是 Object.defineProperty来劫持数据的gettersetter
    • 这种方式一致存在一个缺陷就是当给对象添加或者删除属性时,是无法劫持和监听的
    • 所以在Vue2.x的时候,不得不提供一些特殊的API,比如$set$delete,事实上都是一些hack方法,也增加了开发者学习新的API的成本
    • 而在Vue3.x开始,Vue使用Proxy来实现数据的劫持,这个API的用法和相关的原理我也会在后续讲到
  • 删除了一些不必要的API:
    • 移除了实例上的$on, $off$once
    • 移除了一些特性:如filter、内联模板等;
    • 包括编译方面的优化:
    • 生成Block Tree、Slot编译,优化diff算法优化;

Vue3带来的变化 (新的API)

  • Options APIComposition API
    • 在Vue2.x的时候,我们会通过Options API来描述组件对象;
    • Options API包括data、props、methods、computed、生命周期等等这些选项;
    • 存在比较大的问题是多个逻辑可能是在不同的地方:
    • 比如created中会使用某一个method来修改data的数据,代码的内聚性非常差;
    • Composition API可以将 相关联的代码 放到同一处 进行处理,而不需要在多个Options之间寻找;
  • Hooks函数增加代码的复用性:
    • 在Vue2.x的时候,我们通常通过mixins在多个组件之间共享逻辑;
    • 但是有一个很大的缺陷就是 mixins也是由一大堆的Options组成的,并且多个mixins会存在命名冲突的问题;
    • 在Vue3.x中,我们可以通过Hook函数,来将一部分独立的逻辑抽取出去,并且它们还可以做到是响应式的;