当前位置:首页 > React

react如何实现路由拦截

2026-01-24 20:05:45React

路由拦截的实现方式

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

使用Navigate组件重定向

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

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)

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

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参数避免路由历史记录污染
  • 敏感路由建议服务端二次校验
  • 动态路由参数需在拦截逻辑中特殊处理

react如何实现路由拦截

分享给朋友:

相关文章

vue路由实现

vue路由实现

Vue 路由实现 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是 Vue Router 的基本实现步骤和核心功能。 安装 Vue Router 通过…

vue如何实现拖动

vue如何实现拖动

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

vue如何实现mvvm

vue如何实现mvvm

Vue 实现 MVVM 的核心机制 Vue 的 MVVM(Model-View-ViewModel)实现依赖于数据绑定和响应式系统,通过以下核心机制完成: 数据劫持(响应式系统) Vue 使用 O…

vue如何实现放大缩小

vue如何实现放大缩小

Vue 实现放大缩小功能 在 Vue 中实现放大缩小功能可以通过多种方式实现,以下介绍几种常见的方法: 使用 CSS transform 缩放 通过绑定 CSS 的 transform: scal…

vue手写签名如何实现

vue手写签名如何实现

实现 Vue 手写签名的步骤 使用 canvas 实现基础签名功能 在 Vue 项目中创建一个组件,利用 HTML5 的 canvas 元素实现手写签名功能。通过监听鼠标或触摸事件来捕获用户的绘制路径…

h5如何实现vr效果

h5如何实现vr效果

使用WebXR API实现VR效果 WebXR是浏览器中实现VR/AR的核心API,支持设备姿态追踪、渲染交互等功能。需在支持WebXR的设备(如Oculus、HTC Vive)或浏览器模拟环境中运行…