当前位置:首页 > React

react如何实现路由拦截

2026-01-24 20:05:45React

路由拦截的实现方式

在React中实现路由拦截通常涉及在路由跳转前进行权限或条件检查,可以通过React Router提供的API或自定义逻辑完成。

使用Navigate组件重定向

通过useNavigate钩子和条件判断实现拦截,未满足条件时重定向到指定页面:

react如何实现路由拦截

import { Navigate, useNavigate } from 'react-router-dom';

function PrivateRoute({ children }) {
  const isAuthenticated = checkAuth(); // 自定义权限验证逻辑
  return isAuthenticated ? children : <Navigate to="/login" replace />;
}

通过useEffect监听路由变化

在组件内监听路由变化并执行拦截逻辑:

import { useEffect } from 'react';
import { useNavigate, useLocation } from 'react-router-dom';

function AuthChecker() {
  const navigate = useNavigate();
  const location = useLocation();

  useEffect(() => {
    if (!isAllowedRoute(location.pathname)) {
      navigate('/forbidden', { replace: true });
    }
  }, [location]);
}

自定义高阶组件(HOC)

创建高阶组件包裹需要保护的路由组件:

react如何实现路由拦截

function withAuth(Component) {
  return function WrappedComponent(props) {
    const isAuth = checkAuth();
    if (!isAuth) {
      return <Navigate to="/login" replace />;
    }
    return <Component {...props} />;
  };
}

// 使用方式
const ProtectedDashboard = withAuth(Dashboard);

路由配置中定义拦截器

在路由配置层进行全局拦截(React Router v6示例):

const router = createBrowserRouter([
  {
    path: '/',
    element: <Root />,
    children: [
      {
        path: 'profile',
        element: <AuthWrapper><Profile /></AuthWrapper>
      }
    ]
  }
]);

function AuthWrapper({ children }) {
  return localStorage.getItem('token') ? children : <Navigate to="/" />;
}

路由守卫模式

仿照传统路由守卫的实现方式:

function RouterGuard({ children }) {
  const [verified, setVerified] = useState(false);

  useEffect(() => {
    async function verify() {
      const isValid = await validateToken();
      setVerified(isValid);
    }
    verify();
  }, []);

  return verified ? children : <LoadingScreen />;
}

注意事项

  • 同步验证适合快速判断(如本地存储检查),异步验证需处理加载状态
  • 使用replace参数避免路由历史记录污染
  • 敏感路由建议服务端二次校验
  • 动态路由参数需在拦截逻辑中特殊处理

分享给朋友:

相关文章

vue实现路由守卫

vue实现路由守卫

路由守卫的基本概念 路由守卫是 Vue Router 提供的一种机制,用于在路由跳转前后执行特定的逻辑。通过路由守卫,可以实现权限控制、页面访问限制、数据预加载等功能。 全局前置守卫 使用 rout…

vue路由可以实现什么

vue路由可以实现什么

Vue 路由的核心功能 Vue Router 是 Vue.js 官方的路由管理器,主要用于构建单页面应用(SPA)。它通过管理 URL 与组件的映射关系,实现页面间的无刷新跳转。 路由的基本实现 动…

vue如何实现拖动

vue如何实现拖动

Vue 实现拖动的常用方法 使用 HTML5 原生拖放 API HTML5 提供了原生的拖放 API,可以通过 draggable 属性和相关事件实现拖动功能。 <template>…

Vue实现路由监

Vue实现路由监

Vue 实现路由监听的方法 在 Vue 中可以通过多种方式实现路由监听,以下是常见的几种方法: 使用 watch 监听 $route 对象 通过 Vue 的 watch 功能可以监听 $route…

js实现路由

js实现路由

js实现路由的方法 在JavaScript中实现路由功能可以通过多种方式完成,以下是几种常见的方法: 使用原生JavaScript实现路由 通过监听window.onhashchange事件来实现基…

Java如何实现异步处理

Java如何实现异步处理

Java实现异步处理的常见方法 使用CompletableFuture CompletableFuture是Java 8引入的异步编程工具,支持链式调用和组合操作。 CompletableFutur…