Vue3 为什么使用 Proxy
- 弥补Object.defineProperty的两个不足
- 动态创建的data属性需要用 Vue.set 来赋值,用了Proxy就不需要了
- 基于性能考虑,Vue2篡改了数组的7个API,用了Proxy就不需要了
- defineProperty需要提前递归地遍历data做到响应式,而Proxy可以在真正用到深层数据时再做到响应式
Vue3 为什么使用 Composition API
- Composition API 相比 mixins、高阶组件、Renderless Components更好,因为这些模式存在下面三个问题
- 模板中数据来源不清晰。当一个组件中使用了多个mixin,只看模板很难分清一个属性到底来自哪个mixin
- 命名空间冲突。不同开发者开发的mixin无法保证不会正好用到一样的属性或方法名
- 性能。
- 更适合 TypeScript
推荐阅读 => 尤雨溪 Vue Function-based API RFC
推荐阅读 => 组合API问题解答
相比于 Vue2 做了哪些改动
- 根元素可以不只有一个
createApp()
代替了new Vue()
v-model
代替了以前的v-model
和.sync
- 新增 Teleport 传送门
- ref属性支持函数
- destroyed 改名为 unmounted、beforeDestroy 改名为 beforeUnmount
推荐阅读 => 非兼容的变更