JavaScript 创建 SPA 无需从零手写路由和状态管理,React 和 Vue 等主流框架提供成熟方案;核心是 URL 变化不刷新页面,而是 JS 动态更新视图,框架屏蔽 DOM 操作与历史管理复杂性。
用 JavaScript 创建单页应用(SPA)不一定要从零手写路由和状态管理,主流框架如 React 和 Vue 已提供成熟、轻量、可组合的方案。核心在于理解“单页”的本质:URL 变化不触发整页刷新,而是由 JS 动态更新视图。框架帮你屏蔽底层 DOM 操作和历史记录管理的复杂性,你只需关注组件逻辑和路由配置。
React 本身不内置路由,需搭配 React Router(v6 推荐)。它通过 统一管理浏览器历史,并用 + 声明式定义路径与组件的映射。
npm install react-router-dom
main.jsx)用 createBrowserRouter 或 包裹根组件 定义页面级路由,例如: } /> } />
替代 ,确保无刷新跳转;需要编程式跳转时用 useNavigate() HookVue Router 是 Vue 官方维护的路由库,与 Vue 响应式系统深度集成。v4 版本支持 Composition API,配置更简洁。
npm install vue-router@4
router/index.js),用 createRouter({ history: createWebHistory(), routes: [...] })
main.js
中通过 app.use(router) 注册 导航,用 渲染匹配组件/post/:id)可通过 useRoute().params 获取,无需手动解析 URLSPA 不是把所有代码堆进一个 HTML 就完事。几个实际开发中容易出问题的地方:
index.html,否则刷新页面会 404useEffect + useParams;Vue 可在 onBeforeRouteUpdate 或 watch 路由对象中响应变化你可以用原生 history.pushState() + popstate 事件 + 手动 DOM 替换实现最小 SPA,但要处理路由嵌套、参数解析、滚动行为、加载状态、错误边界等,成本远高于引入一个轻量路由库。现代框架的价值,正在于把这类通用逻辑封装好,让你专注业务。