JavaScript单页面应用(SPA)路由核心是利用History API(pushState、replaceState、popstate)实现无刷新URL变更与视图切换,配合服务端配置避免404,或降级使用hash模式。
JavaScript 单页面应用(SPA)的路由机制,核心是不刷新页面的前提下改变 URL 并响应视图切换。它不依赖服务端返回新 HTML,而是靠前端监听 URL 变化,动态渲染对应组件或内容。
现代 SPA 路由主要基于 History API(pushState、replaceState 和 popstate 事件),而非早期的 hash 模式(#/home)。它允许 JS 在不重载页面的情况下:
/ 变为 /user/123)例如:history.pushState({page: 'user'}, '', '/user/123') 会更新 URL 且不跳转,同时把状态对象存入当前历史项。
你可以用几行代码模拟核心逻辑:
history.pushState 或 location.assign 触发导航(如点击菜单)popstate 事件捕获浏览器前进/后退location.pathname,匹配预定义路径规则(如 /user/:id)renderUser(id))实际项目中,React Router、Vue Router 等库封装了路径匹配(支持嵌套路由、懒加载、守卫等),但底层仍基于 History API + 状态管理。
History 模式下,用户直接访问 https://site.com/user/123 时,请求会发到服务端——而服务端若没配置,会返回 404。解决方法是:
historyApiFallback: true
index.html,让前端路由接管本质是“兜底”:服务端不管路径,一律返回 SPA 入口 HTML,再由前端 JS 解析当前 URL 并渲染正确页面。
当无法控制服务端(如部署在静态托管平台 GitHub Pages),可用 hash 模式(#/user/123)。它的优势是:
# 后的内容不会发送给服务端,天然规避 404hashchange 事件即可响应变化缺点是 URL 不够美观,不利于 SEO(尽管现在影响已很小),且部分老系统对 hash 处理不稳定。
不复杂但容易忽略:路由不是“魔法”,它只是用标准 Web API 拦截导航行
为,把控制权交还给 JavaScript,再结合数据和模板完成局部更新。