1 Vue3为什么使用Proxy

  • 弥补 Object.defineProperty 的两个不足
    • 动态创建的 data 属性需要用 Vue.set 来赋值,Vue 3 用了 Proxy 就不需要了
    • 基于性能考虑,Vue 2 篡改了数组的 7 个 API,Proxy 可以完全对数组进行代理
  • defineProperty 需要提前递归地遍历 data 做到响应式,而 Proxy 可以在真正用到深层数据的时候再做响应式(惰性)

2 Vue3为什么使用Composition API

  • 答案参考尤雨溪的博客:Vue Function-based API RFC - 知乎 (zhihu.com)

  • Composition API 比 mixins、高阶组件、extends 等Vue2的组件逻辑复用模式更好,原因有三:

    • 模版中的数据来源不清晰。

    • 命名空间冲突。

    • 性能。

  • 更适合 TypeScript(相对Vue2)

  • 抄 React Hooks

    • ref() => useRef()
    • watchEffect() => useEffect()

3 Vue3对比Vue2做了哪些改动

官方文档写了(中文在这),这里列出几个容易被考的:

  1. createApp() 代替了 new Vue()
  2. 组合式API
  3. v-model 代替了以前的 v-model 和 .sync
  4. 根元素可以有不止一个元素了
  5. 新增 Teleport 传送门
  6. destroyed 被改名为 unmounted 了(before 当然也改了)
  7. ref 属性支持函数了
  8. setup(props, context) 函数是 vue3 中,专门为组件提供的新属性。它为我们使用 vue3 的 新特性提供了统一的入口
    • setup函数是处于生命周期函数beforeCreate和 Created两个钩子函数之前的函数
    • setup函数中是无法使用 data 和 methods 中的数据和方法的
    • 在setup函数中定义的属性和方法最后都是需要 return 出去的,这样我们就可以在模板中直接访问该对象中的属性和方法

其他建议自己看看写写。