Vue 转 React 代码迁移
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_814dbe54/code-migration-vue-to-react
技能介绍
要解决的问题
把一个 Vue 项目迁到 React,最累的不是写新功能,而是逐文件翻译。一个 .vue 文件拆开后,template 要变成 JSX,<script> 里的 Options API 或 Composition API 要重写成 Hooks,<style> 还得迁到 CSS Modules。再加上 v-if、v-for、v-model 这些指令没有直接对应物,Pinia/Vuex 的状态模型、Vue Router 的路由守卫、VueUse 的生态工具,每一项都要手工找 React 的等价实现。本技能的目标是把这套翻译过程系统化:先分析架构,再分阶段执行迁移,同时保持业务逻辑不变。
核心能力与工作方式
技能按五个阶段推进:
- Stage 0 架构分析:先调用
code-reverse-replicate梳理项目结构,生成组件映射表,明确迁移范围。 - Stage 1 组件转换:把 SFC 拆成 JSX + Hooks,模板指令逐条映射,
v-if→ 三元或&&,v-for→.map(),v-model→value+onChange,生命周期按映射表转换,mounted→useEffect([], []),computed→useMemo。 - Stage 2 状态管理:Pinia store 一对一迁到 Zustand,Vuex 按模块拆成 Zustand slice 或 Redux Toolkit slice,
ref/reactive转为useState/useRef。 - Stage 3 路由迁移:Vue Router 的
createRouter、router-link、router-view分别替换为createBrowserRouter、<Link>、<Outlet>,路由守卫按场景用 loader 或高阶组件替代。 - Stage 4 工具层:
axios实例直接复用,VueUse 换react-use/ahooks,UI 组件库按对等关系替换,如 Element Plus → Ant Design。 - Stage 5 工程化:
vite.config.ts去掉 Vue 插件换 React 插件,测试工具从vue-test-utils切到@testing-library/react。
适用边界与注意点
Teleport和KeepAlive在 React 中没有原生等价物,需要用 Portal 或状态缓存自行实现。- Vue 自定义指令无法 1:1 映射,必须按功能重写。
- Vue 2 项目迁移复杂度较高,建议先做架构分析,再按模块增量迁移,而非一次性全量切换。
- SFC 拆分后,单个
.vue文件会生成多个 React 组件文件,文件组织需要重新规划。 - 样式隔离推荐使用 CSS Modules,以保持与 Vue Scoped CSS 类似的效果。
使用场景
- 维护一个 Vue 2 老项目,团队决定迁到 React 18 并全部加上 TypeScript,需要先梳理架构再分模块迁移
- 把 Vue SFC 中的 template、script、style 逐个拆成 JSX 组件并转换 v-if、v-for、v-model 等指令
- 项目用 Pinia 管理状态,想迁到 React 后继续用 Zustand 保持一对一的 store 结构
- 需要把 Vue Router 的路由配置和守卫替换为 React Router v6 的 loader 或高阶组件
适合人员
- Vue 项目负责人,需要在有限排期内把整个项目迁移到 React 并保证业务逻辑不回归
- 同时维护 Vue 和 React 两套代码的技术负责人,希望统一技术栈减少长期维护成本
- 负责重构的前端工程师,想把 Vue 2 老项目的 Options API 逐文件重写为 React Hooks
- 正在做技术选型评估的架构师,需要先跑一次架构分析再决定是否全量迁移