通八洲科技

javascript如何实现单页面应用_路由机制如何工作?

日期:2026-01-02 00:00 / 作者:紅蓮之龍
JavaScript单页应用路由核心是利用History API(pushState/replaceState/popstate)或hash模式实现URL变更不刷新页面,通过监听URL变化匹配路由表并动态渲染视图,主流框架如React Router、Vue Router均基于此原理封装。

JavaScript 单页面应用(SPA)的路由机制,核心是不刷新页面的前提下改变 URL 并响应视图切换。它不依赖服务端返回新 HTML,而是靠前端监听 URL 变化、匹配路径、动态渲染对应组件或内容。

URL 改变不触发页面刷新的关键:History API

现代 SPA 路由基于浏览器原生的 History APIpushStatereplaceStatepopstate 事件),而非早期的 hash#)方式。

路由匹配与视图渲染:手动实现一个极简路由

无需框架也能理解原理。下面是一个基于 History API 的简易路由示例:

// 定义路由表
const routes = {
  '/': () => renderHome(),
  '/about': () => renderAbout(),
  '/user/:id': (params) => renderUser(params.id)
};

// 解析 URL 参数(简化版)
function parsePath(path) {
  const match = path.match(/^\/user\/(\d+)$/);
  return match ? { id: match[1] } : null;
}

// 渲染函数(模拟)
function renderHome() { document.body.innerHTML = '

首页

'; } function renderAbout() { document.body.innerHTML = '

关于页

'; } function renderUser(id) { document.body.innerHTML = `

用户 ${id}

`; } // 响应路由变化 function route() { const path = window.location.pathname; if (routes[path]) { routes[path](); } else if (path.startsWith('/user/')) { const params = parsePath(path); if (params) routes['/user/:id'](params); } } // 初始化 + 监听 window.addEventListener('popstate', route); route(); // 首次加载时执行 // 导航函数(替代 ) function goTo(path) { history.pushState({}, '', path); route(); }

Hash 模式:兼容性更强的备选方案

在不支持 History API 的旧环境(或需服务端免配置部署时),可用 hash 模式:

实际开发中如何用?

主流框架封装了成熟路由库:

它们自动处理路由注册、嵌套路由、懒加载、守卫(导航守卫)、滚动行为等,但底层仍依赖上述 History 或 Hash 机制。