当前位置:首页 > 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 或产品名称。

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 实现。

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 嵌套路由

js 实现路由

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

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

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

相关文章

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…