vue3.0
1.vue3.0响应式Proxy对比Vue2.0 defineProperty
Proxy代理整个对象,优势:
- 监听对象新增/删除属性
- 监听数组下标、length修改
- 支持Map/Set 等复杂数据类型Reflect配合捕获操作,弥补defineProperty缺陷
2.Options API vs Composition API
options API:选项式,代码分散,大型项目难维护
Composition API (setup):逻辑按功能聚合,复用性强,TS友好
3.setup 执行时机、参数
- 执行在beforeCreate之前,无this
- 参数:props(响应式)父传过来的属性,不能解构,会丢失响应式;要解构用
toRefs(props)、context({emit,attr,slot,expose})
4.ref/reactive区别
- ref:基础类型,返回Reflmpl对象,.value访问;也可存对象,模板使用不用写
.value - reactive:仅对象/数组,Proxy代理,无需.value,不能直接整体重新赋值,会丢失响应式 ref内部封装reactive
5.toRefs/toRefs
toRef:单独提取对象一个属性,保持响应式
toRefs:批量解构对象所有属性,解构后不丢失响应式
6.toRaw/markRaw
toRaw:拿到代理对象的原始普通对象;脱离Proxy代理
markRaw:标记对象,永远不做响应式代理
7.Vue3.0 生命周期组合式API
- onBeforeMount / onMounted
- onBeforUpdate / onUpdated
- onBeforeUnmount / onUnmounted
- onActivated / onDeactivated(keep-alive)
8.Vue3.0性能优化
- Proxy 响应式,初始化不用递归遍历全部对象(惰性代理,用到才代理)
- PatchFlags(编译优化):模板编译时给 VNode 打补丁标记,diff 跳过静态节点,只对比动态内容。
- 静态提升:静态节点提升到渲染函数外面,不会每次渲染重新创建 VNode。
- 最长递增子序列 diff,减少 DOM 移动。
- Tree‑shaking,API 函数按需导入,打包体积更小。
9.computed & watch & watchEffect
- computed:有缓存,依赖不变不重新执行;返回 ref 对象。
- watch:监听指定数据源,变化执行回调;需要明确指定监听源。可以监听 ref、reactive、getter 函数。
- watchEffect(Vue3 独有):自动收集依赖,不用手动指定监听源,立即执行。
watch vs watchEffect
- watch:要明确监听源,可以拿到新旧值;默认不立即执行。
- watchEffect:自动收集依赖,没有 oldVal,默认立即执行;侧重副作用。
10.组件通信
- 父子:父传子:
defineProps子传父:defineEmits双向:v-model,Vue3 支持多 v-model - 模板 ref:
defineExpose,子组件暴露属性给父组件 ref 访问。 - 跨层级:
provide / inject;默认非响应式;想要响应式传 ref/reactive。 - 兄弟 / 全局状态:Pinia(官方)
- 简单事件:mitt(替代 EventBus)
11.内置组件
Teleport:传送门,把模板 DOM 渲染到组件 DOM 树之外(body 下,弹窗、浮层)
Suspense:处理异步组件,等待异步组件加载,显示 fallback 占位。
Fragment:模板允许多根节点,不再必须一个根 div;底层生成 Fragment 虚拟节点。
12.Pinia 要点
- 移除 mutations;actions 支持同步 + 异步
- 多个独立 store,不用 modules、namespace
- TS 原生友好,自动推导类型
- store 之间可以直接 import 互相调用
- 插件:pinia‑plugin‑persistedstate 做持久化