下载工作台
前端框架精通

框架选型与 academy-demo 重构

试读上半部分 · 解锁后可读全文

第 6 章 · 框架选型与 academy-demo 重构

本章目标:建立 Vue / React / 原生 选型方法论;明确何时用框架、何时保留原生或引入 SSR;提供将 frontend-web ch16 毕业项目 分别重构为 academy-demo-vue / academy-demo-react 的检查清单、目录对照、迁移步骤与 100 分答辩验收表;展望 TypeScript、Next.js、Nuxt。

学时建议:3 小时(阅读 + 规划)+ 8~12 小时(重构实战,课外)

前置:完成本模块 ch01~ch05 与 frontend-web ch16 毕业项目。


6.1 三种路线总览

frontend-web ch16(原生 Vite)
         │
    ┌────┴────┐
    ▼         ▼
academy-   academy-
demo-vue   demo-react
(ch01-03)  (ch04-05)
仓库技术栈对应章节
academy-demo原生 JS + 多 HTMLfrontend-web ch16
academy-demo-vueVue 3 + Router + Pinia本模块 ch01~03
academy-demo-reactReact 18 + Router + Hooks本模块 ch04~05

重构不是重写业务,而是同一产品规格换实现层,验收标准与 ch16 对齐并叠加框架最佳实践。


6.2 Vue vs React vs 原生对比

维度原生 JS(ch16)Vue 3React 18
学习曲线最低,直接 DOM中等,模板+响应式直观中等,JSX+Hooks 概念多
模板字符串/HTML 文件单文件 .vue 模板JSX in JS
状态手写 stateref/reactive/PiniauseState/Context/Zustand
生态自选拼凑Vue Router/Pinia/Element PlusReact Router/Redux/Ant Design
招聘市场偏维护老项目国内中小厂、政务、后台多大厂、跨端、海外多
包体积最小(无框架)运行时 ~34KB gzip运行时 ~45KB gzip
TS 支持JSDoc良好(Volar)极佳(生态默认 TS)
适用场景落地页、嵌入页、极简 H5中后台、运营配置、快速 CRUD复杂交互、设计系统、跨端
SSR 方案不适用Nuxt 3Next.js
行业案例 · 贤紫优选商城:C 端商城 H5 活动页保持 原生 + Vite(首屏 < 80KB);商户后台用 Vue 3(表单密集);数据运营大屏用 React(表格+图表组件生态)。同一后端 OpenAPI,三端并行,按场景选型而非统一技术宗教。

6.3 何时用框架、何时原生、何时 SSR

6.3.1 决策树

页面是否需要复杂组件状态与多页共享?
├─ 否 → 原生 / 静态站(ch16 足够)
└─ 是 → 需要 SEO 首屏在服务端渲染?
         ├─ 否 → SPA:Vue 或 React(本模块)
         └─ 是 → Nuxt / Next(SSR/SSG)
场景推荐理由
营销落地页、单页活动原生或 Astro极致首屏、少 JS
学院课程门户(ch16)原生或 SPA无强 SEO,Mock 演示
商城商品详情 SEONuxt/Next SSR爬虫可读、分享卡片
商户后台 CRUDVue 3 + UI 库表单表格成熟
实时协作白板React + 状态库细粒度更新、生态

6.3.2 不选框架的信号

  • 总 JS < 50KB,交互少于 3 个状态字段
  • 生命周期 < 3 个月的一次性页
  • 强依赖现有 jQuery 插件且无迁移预算
  • 团队零前端编制,仅运维维护

6.3.3 必须上 SSR 的信号

  • 核心流量来自搜索引擎且内容动态
  • 首屏 LCP 在 3G 网络必须 < 2.5s 且客户端包已优化仍不达标
  • 社交分享依赖服务端注入 og 标签(也可用 prerender 折中)

6.4 ch16 → Vue 重构检查清单

6.4.1 功能映射

ch16 MustVue 实现完成 □
首页 Hero + 精选HomeView.vue
课程列表搜索防抖useDebounce composable + store
标签筛选courses.activeTag + computed
课程详情 + 章节CourseDetailView + fetchChapters
待办 CRUDTodoView + localStorage
响应式 320~1440tokens.css + Grid
收藏favorites store
npm run buildVite 默认

6.4.2 目录对照

ch16 原生academy-demo-vue
index.html + main.jsviews/HomeView.vue
courses.htmlviews/CourseListView.vue
course.html?id=router /courses/:id
todo.htmlviews/TodoView.vue
components/course-card.jscomponents/CourseCard.vue
api/client.jsapi/client.js(保留)
utils/debounce.jscomposables/useDebounce.js
utils/storage.jsPinia + localStorage
style/tokens.cssassets/tokens.css

6.4.3 迁移步骤(建议 4 天)

任务产出
D1初始化项目、路由四页空壳、Header可点击导航
D2Pinia courses + 列表页 parity搜索筛选与 ch16 一致
D3详情章节、Todo、favorites主链路打通
D4响应式、a11y、build、README可部署 dist

6.5 ch16 → React 重构检查清单

6.5.1 功能映射

ch16 MustReact 实现完成 □
四页面Routes + pages/*
搜索防抖useDebounce
课程卡片CourseCard.jsx
详情CourseDetailPage + useParams
待办useTodos + TodoPage
主题切换useLocalStorage('theme')
错误/加载态各页三态 UI

6.5.2 目录对照

ch16 原生academy-demo-react
多 HTML 入口单页 main.jsx + Router
components/header.jslayouts/AppLayout.jsx
state 散落各 jshooks/useCourses.js
全局样式index.css + CSS Modules

6.5.3 迁移注意点

说明
状态提升收藏、课程列表放 Context 或单页父级
路由 statenavigate('/todo', { state }) 替代 query 传对象
严格模式StrictMode 下 effect 双调用,注意清理函数
SEOSPA 需 prerender 插件或接 SSR 才等同 ch16 meta

6.6 质量门禁(继承 ch16)

重构项目除功能 parity 外,须保留 ch16 质量底线:

类别标准
Lighthouse 移动 Performance≥ 85
a11y无 axe critical;键盘可操作
安全dangerouslySetInnerHTML 裸用用户输入
文档README:安装、脚本、环境变量、部署
Mockpublic/mock 与 ch16 数据兼容

以下内容需解锁后阅读

试读已结束。解锁本章 ¥5.00,或开通年度会员畅读全部教程。
年度会员 ¥199.00/年; 小紫 AI 工作台有效会员 ¥99.00/年

正文仅在服务端鉴权后下发,未付费无法获取下半部分内容。