Skip to content

脚本能力矩阵

宏能力

状态说明
defineProps支持支持运行时声明与 TS 类型提取
defineEmits支持支持事件签名提取与调用转换
defineSlots支持支持 slot 类型提取
defineOptions部分支持主要处理可分析字段(如 name

API 适配能力(完整列表)

响应式状态 API

Vue API适配目标类别说明
refuseVRef有副作用创建响应式引用
reactiveuseReactive有副作用创建响应式对象
computeduseComputed有副作用创建计算属性
readonlyuseReadonly有副作用创建只读响应式对象
shallowRefuseShallowRef有副作用创建浅层响应式引用
shallowReactiveuseShallowReactive有副作用创建浅层响应式对象
shallowReadonlyuseShallowReadonly有副作用创建浅层只读响应式对象
toRefuseToVRef有副作用将响应式对象的属性转为 ref
toRefsuseToVRefs有副作用将响应式对象的所有属性转为 ref
toRawuseToRaw有副作用获取响应式对象的原始对象
isRefisRef纯函数检查是否为 ref
isProxyisProxy纯函数检查是否为 proxy
isReactiveisReactive纯函数检查是否为 reactive 对象

生命周期 API

Vue API适配目标类别说明
onMounteduseMounted纯函数组件挂载后执行
onUnmounteduseUnmounted纯函数组件卸载后执行
onBeforeMountuseBeforeMount纯函数组件挂载前执行
onBeforeUnmountuseBeforeUnMount纯函数组件卸载前执行
onBeforeUpdateuseBeforeUpdate纯函数组件更新前执行
onUpdateduseUpdated纯函数组件更新后执行
useActiveduseActived纯函数KeepAlive 组件激活时执行
useDeactivateduseDeactivated纯函数KeepAlive 组件停用时执行

侦听器 API

Vue API适配目标类别说明
watchuseWatch有副作用侦听响应式数据源变化
watchEffectuseWatchEffect纯函数自动追踪依赖的侦听器
watchPostEffectuseWatchPostEffect纯函数在 DOM 更新后执行的侦听器
watchSyncEffectuseWatchSyncEffect纯函数同步执行的侦听器

依赖注入 API

Vue API适配目标类别说明
provideProvider上下文组件提供依赖注入值
injectuseInject有副作用注入依赖值

模板引用 API

Vue API适配目标类别说明
useTemplateRefuseRef纯函数模板引用(转换为 React useRef)

路由相关 API

Vue Router 风格 API适配目标类别说明
useRouteuseRoute有副作用访问当前路由信息
useRouteruseRouter有副作用访问路由器实例
useLinkuseLink有副作用自定义路由链接
onBeforeRouteLeaveuseBeforeRouteLeave纯函数路由离开前守卫
onBeforeRouteUpdateuseBeforeRouteUpdate纯函数路由更新前守卫
onBeforeRouteEnteruseBeforeRouteEnter纯函数路由进入前守卫
createRoutercreateRouter纯函数创建路由器实例

工具函数 API

Vue API适配目标类别说明
nextTicknextTick纯函数下一次 DOM 更新后执行

关键转换行为

  1. emit('change', payload) 会转换为 props.onChange(payload)
  2. 顶层箭头函数如内部拥有可追踪状态的,会自动补充 useCallback 与依赖数组
  3. defineAsyncComponent 会走 React.lazy 路径
  4. watchEffect 系列 API 会自动分析依赖并添加依赖数组参数
  5. 生命周期钩子会自动转换为对应的 React Hook 形式

强约束(必须)

  1. 宏只能在 SFC 顶层定义
  2. 将被转为 Hook 的 use* API (如 ref/watchEffect 等)只能在顶层或顶层函数调用
  3. defineAsyncComponent 仅支持 ESM import('...') 形式

部分支持与风险

场景状态风险
传统 script部分支持可编译但稳定性低于 <script setup>
复杂动态表达式部分支持可能告警、移除或降级
不可分析依赖链部分支持依赖注入可能不符合预期
不属于编译器处理的代码部分支持未知的 API 等会原样带到 React 中

推荐实践

  • 使用 <script setup lang="ts">
  • 在评审中强制检查 Hook 顶层规则
  • 将编译告警纳入 CI 失败条件
  • 对于复杂响应式逻辑,优先使用 useReactive 而非多个 ref
  • 不使用在编译器识别范围之外的其他 Vue API 或相关库,万不得已可以临时写 React 平台的代码

Released under the MIT License