当前位置:首页 > JavaScript

js 实现路由

2026-02-02 06:34:19JavaScript

实现路由的基本方法

在 JavaScript 中实现路由通常涉及监听 URL 变化,并根据 URL 路径渲染不同的内容。以下是几种常见的方法:

基于 window.locationhistory API 监听 URL 变化可以通过 popstate 事件或手动解析 window.location 实现。history.pushStatehistory.replaceState 可以修改 URL 而不触发页面刷新。

window.addEventListener('popstate', () => {
  const path = window.location.pathname;
  renderContent(path);
});

function navigateTo(path) {
  history.pushState({}, '', path);
  renderContent(path);
}

function renderContent(path) {
  const root = document.getElementById('root');
  root.innerHTML = path === '/home' ? '<h1>Home</h1>' : '<h1>404</h1>';
}

基于 hash 路由 hash 路由通过监听 hashchange 事件实现,适用于不支持 history API 的旧浏览器。

window.addEventListener('hashchange', () => {
  const hash = window.location.hash.substr(1);
  renderContent(hash);
});

function navigateTo(path) {
  window.location.hash = path;
}

function renderContent(path) {
  const root = document.getElementById('root');
  root.innerHTML = path === 'home' ? '<h1>Home</h1>' : '<h1>404</h1>';
}

使用第三方库

React Router 在 React 中,可以使用 react-router-dom 实现路由功能。

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

function App() {
  return (
    <Router>
      <Link to="/home">Home</Link>
      <Route path="/home" component={Home} />
    </Router>
  );
}

function Home() {
  return <h1>Home</h1>;
}

Vue Router 在 Vue 中,可以通过 vue-router 实现路由。

import Vue from 'vue';
import VueRouter from 'vue-router';

Vue.use(VueRouter);

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

const router = new VueRouter({ routes });

new Vue({
  router,
  template: '<router-view></router-view>'
}).$mount('#app');

动态路由匹配

动态路由允许根据参数渲染不同内容,例如用户 ID 或产品名称。

js 实现路由

React Router 动态路由

<Route path="/user/:id" component={User} />

function User({ match }) {
  return <h1>User ID: {match.params.id}</h1>;
}

Vue Router 动态路由

const routes = [
  { path: '/user/:id', component: User }
];

function User() {
  return <h1>User ID: {{ $route.params.id }}</h1>;
}

路由守卫

路由守卫用于在导航前后执行逻辑,例如权限验证或数据加载。

React Router 守卫 通过高阶组件或 useEffect 实现。

js 实现路由

function PrivateRoute({ component: Component, ...rest }) {
  const isAuthenticated = checkAuth();
  return (
    <Route
      {...rest}
      render={props =>
        isAuthenticated ? <Component {...props} /> : <Redirect to="/login" />
      }
    />
  );
}

Vue Router 守卫 通过 beforeEach 钩子实现。

router.beforeEach((to, from, next) => {
  if (to.meta.requiresAuth && !isAuthenticated) {
    next('/login');
  } else {
    next();
  }
});

嵌套路由

嵌套路由允许在父路由下定义子路由。

React Router 嵌套路由

<Route path="/dashboard" component={Dashboard}>
  <Route path="/dashboard/profile" component={Profile} />
</Route>

Vue Router 嵌套路由

const routes = [
  {
    path: '/dashboard',
    component: Dashboard,
    children: [
      { path: 'profile', component: Profile }
    ]
  }
];

以上方法涵盖了从原生 JavaScript 到主流框架的路由实现,可以根据项目需求选择适合的方案。

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

相关文章

vue实现路由

vue实现路由

Vue 路由的实现方法 Vue 路由可以通过 Vue Router 库来实现,Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue Router 通…

Vue实现路由监

Vue实现路由监

Vue实现路由监听的方法 在Vue中,可以通过多种方式监听路由变化,以下是常见的实现方法: 使用Vue Router的全局前置守卫 router.beforeEach((to, from, n…

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-contain…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取 j…