Vue + React 混写迁移实战:从 0 到 1 跑通一个真实客服后台

90 阅读5分钟

在 Vue 3 项目中混入 React 生态能力的项目,将其迁移至 React 的完整教程,手把手带你体验 VuReact 的编译能力


🎯 写在前面

vureact-showcase(1024x576).gif

这是一篇贴近真实业务场景的多渠道客服协同后台迁移实战教程。通过一个 Vue + React 混合开发 项目,你将完整经历一次 VuReact 在复杂后台场景下的混写与转换迁移闭环。

读完本文,你将学会:

  • ✅ 克隆并启动示例仓库
  • ✅ 理清项目目录,定位迁移关键文件
  • ✅ 使用 build / watch 观察编译产物
  • ✅ 启动 React 产物并完成业务验收

重点使用的混合技术栈:

  • Vue 3
  • Vue Router 4
  • Ant Design 6(React)
  • Zustand(React)

在线体验入口


🧩 项目结构速览

先对目录有个整体印象(重点看加粗部分):

customer-support-hub/
├─ package.json
├─ vureact.config.ts          # 编译配置
├─ vite.config.ts
├─ index.html
└─ src/
   ├─ main.ts                 # Vue 入口 → 编译后为 React 入口
   ├─ App.vue
   ├─ styles/
   ├─ store/
   │  └─ useAppStore.ts       # 🔑 跨页面状态(验收核心)
   ├─ components/
   │   └─ ...(多个业务组件)
   ├─ pages/                  # 🔑 所有业务页面
   │   ├─ Dashboard.vue
   │   ├─ TicketsList.vue
   │   ├─ Customers.vue
   │   ├─ KnowledgeBase.vue
   │   ├─ SlaBoard.vue
   │   └─ auth/Login.vue
   └─ router/
      ├─ index.ts             # 🔑 路由适配关键文件
      └─ routes.ts

迁移时的三个关键盯防点

  1. src/main.ts — 决定产物入口
  2. src/router/index.ts — 路由守卫与适配
  3. src/store/useAppStore.ts — 状态联动是否正常

📦 Step 1:克隆 & 安装依赖

git clone https://github.com/vureact-js/example-customer-support-hub.git
cd customer-support-hub
npm install

确认 package.json 中包含以下脚本:

"scripts": {
  "vr:watch": "vureact watch",
  "vr:build": "vureact build"
}

✅ 验收标准

  • npm install 无报错
  • 项目根目录存在 vureact.config.ts
  • 可以执行 npm run vr:build

⚙️ Step 2:跑通编译闭环

执行全量编译:

npm run vr:build

若希望源码改动后自动增量编译,开启监听模式:

npm run vr:watch

📌 你会看到

  • 控制台输出编译统计(SFC / script / style 处理数量)
  • 根目录生成 .vureact/react-app 文件夹
  • React 产物结构与 Vue 源码保持高度一致

💡 关键理解

  • 这一步的目标是确认编译器能稳定产出 React 工程,而不是立刻看到页面
  • 若产物未生成,优先检查 vureact.config.ts 是否存在
  • 示例通过 onSuccess 钩子自动修复样式导入,以最终产物为准

🔧 常见问题

症状排查
build 失败检查 Vue 源码是否有语法错误
产物目录缺失命令是否在项目根目录执行?
watch 不同步确认监听进程是否仍在运行

✅ 验收标准

  • .vureact/react-app 成功生成
  • 重复执行 npm run vr:build 可稳定得到产物

🔍 Step 3:理解三个关键文件

1️⃣ 路由入口 — src/router/index.ts

它决定了 Vue 路由如何被适配到 React 产物:

router: {
  configFile: 'src/router/index.ts',
}

2️⃣ 状态入口 — src/store/useAppStore.ts

管理会话、筛选条件、活动流等跨页面状态。
状态变化链路通 → 页面联动通

3️⃣ 页面入口 — src/pages/

验收时重点关注这些页面:

  • Dashboard.vue
  • TicketsList.vue
  • TicketDetail.vue
  • Customers.vue
  • KnowledgeBase.vue
  • SlaBoard.vue
  • auth/Login.vue

建议阅读顺序
路由 → 状态 → 页面


🚀 Step 4:启动 React 产物

进入生成的 React 工程并启动开发服务器:

cd .vureact/react-app
npm install          # 首次需要安装依赖
npm run dev

🧪 你会看到

  • Vite dev server 正常启动
  • 浏览器打开登录页
  • 登录后进入客服协同主界面
  • 修改 Vue 源文件 → React 产物热更新

⚠️ 重要提醒

  • 这一步验证的是产物能否独立运行
  • 对于混写项目,Vue 源码和 React 产物是两条同时存在但职责不同的链路
  • 请把 React 产物当作编译结果来验证,不要直接修改它

✅ 验收标准

  • npm run dev 成功启动
  • 可从登录流进入业务主页
  • 修改 Vue 源码后,React 页面同步更新

✅ Step 5:业务验收(核心!)

页面启动后,按以下链路验收:

你应该能完成的操作

  • 登录 → 进入系统
  • 打开 Dashboard / Tickets / Customers / KnowledgeBase / SlaBoard / Settings
  • 工单列表:筛选、切换、查看详情
  • 客户页:查看风险信息,观察状态联动
  • SLA 看板:风险状态实时变化
  • 知识库:浏览 + 检索

重点观察的状态变量

状态作用如何验证
session登录与路由守卫未登录访问业务页 → 跳转登录
ticketFilters工单列表筛选修改筛选条件 → 列表刷新
activities活动流记录执行接单/升级 → 活动流新增记录
slaConfigSLA 风险配置修改配置 → SLA 看板同步

🔧 常见问题速查

现象排查方向
登录后仍回登录页检查路由守卫 + session 状态
列表筛选不生效检查筛选条件是否正确写入 store
活动流不更新检查动作是否调用了对应的 mock-api

✅ 验收标准

  • 登录、路由、筛选、详情、SLA、知识库等核心链路全部跑通
  • 能明确说出每个页面依赖的状态和动作
  • 已完成一次从 Vue 源码到 React 产物的完整闭环验证

🔗 相关问题与资源


🧠 总结

按照上述顺序走完 克隆 → 安装 → 编译 → 启动 → 验收,你就建立了 VuReact 的最小工作流:

先让编译成立 → 再让产物运行 → 最后用业务链路验证迁移结果

很多开发者会疑惑:Vue 的响应式、路由守卫、生命周期等逻辑,如何平稳运行在 React 中?
核心依靠两个底层依赖:@vureact/runtime@vureact/router,它们为编译转换提供了稳定的运行时与路由适配能力。

📢 特别说明:VuReact 不同于 Veaury、Vuera 等运行时套壳方案,它采用语义级编译路线,直接将 Vue 转换为纯净、无耦合、可独立维护的 React 代码,在性能、包体积与可维护性上更具优势。


📚 后续学习导航

  1. Build 增量编译 | Watch 监听模式 — 掌握 build / watch 命令
  2. 配置 API — 深入理解 input/exclude/output/router 核心配置
  3. 编译约定 — 明确编译器行为边界,降低迁移偏差

如果这篇文章对你有帮助,欢迎点赞、收藏、评论~
也欢迎在 GitHub 上给 VuReact 点个 ⭐️,开源不易,感谢支持!