当前位置:首页 > JavaScript

js 实现路由

2026-04-06 23:50:54JavaScript

实现路由的基本概念

路由在前端开发中用于管理不同URL路径对应的页面或组件渲染。常见的实现方式包括原生JavaScript、第三方库(如React Router、Vue Router)或基于History API的自定义方案。

原生JavaScript实现路由

通过监听URL变化并动态加载内容,以下是基于hashHistory API的两种实现方式:

js 实现路由

基于Hash的路由

Hash路由依赖URL中的#部分,变化时触发hashchange事件,兼容性较好。

js 实现路由

class HashRouter {
  constructor() {
    this.routes = {};
    window.addEventListener('hashchange', this.handleHashChange.bind(this));
  }

  addRoute(path, callback) {
    this.routes[path] = callback;
  }

  handleHashChange() {
    const hash = window.location.hash.slice(1) || '/';
    if (this.routes[hash]) {
      this.routes[hash]();
    }
  }
}

// 使用示例
const router = new HashRouter();
router.addRoute('/', () => console.log('Home Page'));
router.addRoute('/about', () => console.log('About Page'));

基于History API的路由

History API通过pushStatepopstate实现无刷新URL变更,需服务器配合避免404。

class HistoryRouter {
  constructor() {
    this.routes = {};
    window.addEventListener('popstate', this.handlePopState.bind(this));
  }

  addRoute(path, callback) {
    this.routes[path] = callback;
  }

  navigate(path) {
    history.pushState({}, '', path);
    this.handlePopState();
  }

  handlePopState() {
    const path = window.location.pathname;
    if (this.routes[path]) {
      this.routes[path]();
    }
  }
}

// 使用示例
const router = new HistoryRouter();
router.addRoute('/', () => console.log('Home Page'));
router.addRoute('/about', () => console.log('About Page'));
router.navigate('/about'); // 手动触发导航

使用第三方库

若项目基于框架(如React/Vue),可直接使用成熟的路由库:

React Router示例

import { BrowserRouter, Route, Link } from 'react-router-dom';

function App() {
  return (
    <BrowserRouter>
      <Link to="/">Home</Link>
      <Link to="/about">About</Link>
      <Route exact path="/" component={Home} />
      <Route path="/about" component={About} />
    </BrowserRouter>
  );
}

Vue Router示例

const routes = [
  { path: '/', component: Home },
  { path: '/about', component: About },
];

const router = new VueRouter({
  routes,
});

new Vue({
  router,
}).$mount('#app');

关键注意事项

  1. Hash路由:兼容性好但URL不美观,适合静态站点。
  2. History路由:需服务器配置重定向(如Nginx的try_files),否则刷新会404。
  3. 动态路由:可通过参数匹配(如/user/:id),需在回调中解析参数。
  4. 懒加载:结合动态导入(如import())优化性能。

通过以上方法,可根据项目需求选择合适的路由实现方案。

标签: 路由js
分享给朋友:

相关文章

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

vue路由实现iframe

vue路由实现iframe

Vue 路由实现 iframe 的方法 在 Vue 项目中,可以通过路由配置和组件的方式实现 iframe 的嵌入。以下是具体实现步骤: 创建 iframe 组件 新建一个 Vue 组件用于承载 i…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…