- Published on
前端路由
- Authors

- Name
- Li WenKang
- https://x.com/liwenkang_space
前端路由是什么?
前端路由能让浏览器不重新加载整个页面的条件下,通过改变 url 展示不同的组件,从而实现页面跳转的全前端(JavaScript)控制,是 SPA 的基础
为什么要有前端路由?
- 传统后端路由,在跳转后会先白屏,等接口重新返回 html 后,才能正常展示,前端路由可以实现"无缝切换"
- 降低了服务端压力,无需每个页面都重新请求页面资源(CSS/JS)
- 支持复杂应用交互,比如音乐播放器,在路由跳转后,还要保留当前的状态(比如音乐播放中)
怎么实现?
- Hash 路由,在 url 上可以看到 # ,依赖于 hashchange 事件的监听和触发。适合静态部署或兼容旧浏览器的项目
- History 路由,依赖于 popstate 事件的监听(仅浏览器前进/后退触发),以及 history.pushState() 方法更新 url(注意不会触发 popstate,需手动拦截
<a>标签点击,并更新UI) ,需要服务端配置支持(浏览器直接访问/home等路径会向服务器发送请求,若未配置统一回退根页面,则返回404错误。Nginx 服务端需将所有路由指向入口HTML文件),URL更简洁,适合现代浏览器"
最佳实践?
- 强制页面刷新的时候,会重置页面状态(如表单输入),但URL保留;前端路由库需通过sessionStorage或重新匹配路由恢复组件状态,而浏览器历史栈的URL记录确实存在
- 路由的命名必须清晰明了
- 结合鉴权使用时,严格区分需鉴权路由(个人文档页)和非鉴权路由(比如登录页,活动查看页)
- 状态保留:避免用window.location.reload()强制刷新,可使用路由库的“导航守卫”在跳转前保存数据
- 错误处理:为无效URL设置兜底页面(如404页),提升用户体验
- 懒加载优化:通过Webpack等工具将不同页面代码打包为独立文件,访问时再加载,减少初始负载量,提升首屏速度(如Vue中的() => import('./views/Home.vue'))