javascript如何实现路由_有哪些前端路由方式

前端路由核心是不刷新页面改变URL并响应视图变化,分History API(推荐、需服务端配合)和Hash(兼容好、SEO差)两类,现代框架均封装此机制。

JavaScript 实现前端路由,核心是**不刷新页面的前提下改变 URL 并响应视图变化**。主流方式分两类:基于浏览器 History API(推荐)和基于 URL Hash(兼容老浏览器)。现代框架(如 React Router、Vue Router)底层都封装了这两种机制。

Hash 路由(# 开头)

利用 window.location.hash 变化触发路由,不向服务器发送请求,兼容性好(支持 IE8+)。

  • URL 示例:https://example.com/#/homehttps://example.com/#/user/123
  • 监听方式:绑定 hashchange 事件,读取 location.hash.slice(1) 获取路径
  • 跳转方式:修改 location.hash = '/about' 即可,浏览器自动记录历史
  • 优点:简单、零服务端配置、无刷新、兼容强
  • 缺点:URL 不够美观,SEO 不友好(搜索引擎通常忽略 # 后内容)

History 路由(HTML5 模式)

基于 history.pushState()history.replaceState(),配合 popstate 事件实现无刷新导航,URL 更干净(如 /user/123)。

  • 需服务端配合:所有前端路由路径都应返回同一份 HTML(如 index.html),否则直接访问会 404
  • 监听前进/后退:用 window.addEventListener('popstate', handler)
  • 跳转示例:history.pushState({ path: '/news' }, '', '/news')
  • 注意:pushState 不触发页面刷新,但不会加载新资源——渲染逻辑完全由 JS 控制

手动实现一个极简路由(History 版)

适合理解原理,实际项目建议用成熟库:

function router() {
  const routes = new Map();

function navigate(path) { history.pushState({ path }, '', path); render(path); }

function render(path) { const component = routes.get(path) || routes.get('/404'); document.getElementById('app').innerHTML = component?.() || 'Not Found'; }

window.addEventListener('popstate', e => render(e.state?.path || location.pathname));

return { add: (path, handler) => routes.set(path, handler), start: () => render(location.pathname) }; }

// 使用 const app = router(); app.add('/', () => '

首页

'); app.add('/about', () => '

关于

'); app.start();

框架路由怎么选?

React 推荐 React Router v6+(基于 History API,默认 BrowserRouter);Vue 推荐 Vue Router 4(支持 history 和 hash 模式,可配置);纯 JS 项目可用 Page.jsNavigo 等轻量库。

基本原则:新项目优先用 History 路由(体验好、URL 正规),老项目或需 IE 支持再降级用 Hash 路由。

基本上就这些。不复杂但容易忽略服务端配置和 history 回退监听细节。