Object.defineProperty 转换为 getter/setter<script setup> 语法糖,代码更简洁| 优化点 | 说明 |
|---|---|
| Patch Flags | 编译时标记动态节点,Diff 时只对比变化部分 |
| Hoist Static | 静态节点提升到渲染函数外,只创建一次 |
| Block Tree | 收集动态节点为扁平数组,Diff 只需遍历动态节点 |
| 缓存事件处理 | 相同的 @click 处理函数会被缓存 |
把组件渲染到 body 下,不受父级 overflow/z-index 影响。
| Vue 2 | Vue 3 |
|---|---|
| beforeCreate | setup() |
| created | setup() |
| beforeMount | onBeforeMount |
| mounted | onMounted |
| beforeUpdate | onBeforeUpdate |
| updated | onUpdated |
| beforeDestroy | onBeforeUnmount |
| destroyed | onUnmounted |
| errorCaptured | onErrorCaptured |
| Vue 2 | Vue 3 |
|---|---|
| prop: value | prop: modelValue |
| event: input | event: update:modelValue |
| 多个 v-model 用 .sync | 多个 v-model 原生支持 |
| Vue 2 | Vue 3 |
|---|---|
| 作用域插槽编译成函数 | 所有插槽都是函数 |
| 父组件更新,子组件也更新 | 父子更新隔离 |
| Vue 2 | Vue 3 | |
|---|---|---|
| 状态管理 | Vuex | Pinia(推荐) |
| 路由 | vue-router 3 | vue-router 4 |
| 构建 | Webpack | Vite |
| UI 组件库 | Element UI | Element Plus |
| 维度 | Vue 2 | Vue 3 |
|---|---|---|
| 响应式 | defineProperty | Proxy |
| API | Options | Composition + script setup |
| 性能 | 一般 | 提升显著 |
| TS 支持 | 弱 | 强 |
| 新特性 | 无 | Fragment/Teleport/Suspense |
| 打包 | 全量 | Tree-shaking |
| 构建 | Webpack | Vite |
| 状态管理 | Vuex | Pinia |
| 推荐场景 | 老项目维护 | 新项目 |