vue3与vue2的区别
About 2 min
Vue3 常见面试题
核心特性
Vue3 有哪些新特性?
- Composition API
- 更好的 TypeScript 支持
- 性能优化(更小的包体积、更快的渲染)
- Fragments(多根节点组件)
- Teleport(传送门)
- Suspense(异步组件)
- 自定义渲染器 API
- 响应式系统重写(Proxy 替代 Object.defineProperty)
Composition API 和 Options API 有什么区别?
- Options API 按选项(data, methods, computed等)组织代码
- Composition API 按逻辑功能组织代码,更好的代码组织和复用
- Composition API 更适合 TypeScript 和大型项目
Vue3 的响应式原理是什么?
- 使用 Proxy 替代 Vue2 的 Object.defineProperty
- 可以检测到属性的添加和删除
- 可以检测数组索引和 length 变化
- 支持 Map, Set, WeakMap, WeakSet
组合式 API
setup 函数是什么?
- 新的组件选项,在组件创建之前执行
- 接收 props 和 context 参数
- 返回的对象会暴露给模板和组件实例
ref 和 reactive 的区别?
ref
用于基本类型,通过.value
访问reactive
用于对象,直接访问属性ref
在模板中自动解包,不需要.value
watch 和 watchEffect 的区别?
watch
需要明确指定监听的数据源和回调watchEffect
自动收集依赖,立即执行一次watch
可以访问变化前后的值
性能优化
Vue3 做了哪些性能优化?
- 更高效的虚拟 DOM(静态节点提升、补丁标志)
- 基于 Proxy 的响应式系统
- Tree-shaking 支持(更小的包体积)
- 编译时优化(Block tree、Slot 编译优化)
什么是静态提升(Hoisting)?
- 编译时将静态节点提升到渲染函数外
- 避免每次渲染都重新创建这些节点
- 减少虚拟 DOM 比对的开销
组件相关
Teleport 组件的作用是什么?
- 将子组件渲染到 DOM 中的其他位置
- 常用于模态框、通知、弹出菜单等
- 保持组件逻辑位置不变,只改变渲染位置
Suspense 组件的作用?
- 处理异步组件加载状态
- 提供默认内容和加载状态
- 可以等待多个异步依赖
生命周期
Vue3 生命周期有哪些变化?
- `beforeCreate` 和 `created` 被 `setup` 替代
- 其他生命周期加上 `on` 前缀(如 `onMounted`)
- 新增 `onRenderTracked` 和 `onRenderTriggered` 用于调试
其他
Vue3 为什么使用 Proxy 实现响应式?
- 可以检测到属性的添加和删除
- 可以拦截数组变化
- 性能更好
- 支持更多数据结构(Map, Set等)
如何在 Vue3 中使用 TypeScript?
- 更好的类型推断
- 支持使用泛型定义 props
- 可以通过 `defineComponent` 获得更好的类型支持
Vue3 的模板编译器有哪些改进?
- 生成更优化的渲染代码
- 支持 Block tree 减少不必要的比对
- 更好的静态内容处理
Vue3 中的 Fragment 是什么?
- 允许组件有多个根节点
- 不需要额外的包裹元素
- 减少不必要的 DOM 层级