当前位置:首页 > React

react里如何做路由拦截

2026-01-26 02:58:57React

路由拦截的实现方法

在React中实现路由拦截通常涉及以下两种主流方案,适用于不同场景需求:

使用React Router的导航守卫

React Router v6+版本推荐采用<Navigate>组件和useNavigate钩子实现拦截逻辑:

react里如何做路由拦截

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

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

function App() {
  return (
    <Routes>
      <Route path="/" element={<PublicPage />} />
      <Route
        path="/dashboard"
        element={
          <PrivateRoute>
            <Dashboard />
          </PrivateRoute>
        }
      />
    </Routes>
  );
}

全局路由跳转拦截可通过监听路由变化实现:

const navigate = useNavigate();
useEffect(() => {
  const unlisten = navigate((location) => {
    if (!allowNavigation(location)) return false;
  });
  return () => unlisten();
}, []);

高阶组件封装方案

通过高阶组件包装需要保护的页面组件:

react里如何做路由拦截

function withAuth(Component) {
  return (props) => {
    const [verified, setVerified] = useState(false);

    useEffect(() => {
      async function verify() {
        const isValid = await checkToken();
        if (!isValid) redirectToLogin();
        setVerified(true);
      }
      verify();
    }, []);

    return verified ? <Component {...props} /> : <LoadingIndicator />;
  };
}

// 使用方式
const ProtectedPage = withAuth(PageComponent);

路由配置拦截

通过集中式路由配置实现统一管理:

const routes = [
  { path: '/', element: <Home /> },
  { 
    path: '/admin', 
    element: <Admin />,
    middleware: [authGuard, adminCheck] 
  }
];

function applyMiddlewares(route) {
  if (!route.middleware) return route.element;
  return route.middleware.reduce((acc, guard) => guard(acc), route.element);
}

动态路由加载拦截

结合懒加载实现权限过滤:

const router = createBrowserRouter([
  {
    path: '/',
    async loader() {
      const user = await getUser();
      if (!user) throw new Response(null, { status: 401 });
      return { user };
    },
    children: [
      { path: 'profile', element: <Profile /> }
    ]
  }
]);

注意事项

  • 服务端渲染场景需在服务端路由层额外处理重定向
  • 敏感路由建议添加服务端二次验证
  • 路由跳转取消时需处理组件卸载的清理工作
  • 使用React Router最新版本时注意API变更(v6.4+新增data router特性)

标签: 路由如何做
分享给朋友:

相关文章

vue路由实现介绍

vue路由实现介绍

Vue 路由基础概念 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。它通过动态映射 URL 到组件,实现无刷新页面切换。核心功能包括: 嵌套路由:支持多…

vue实现子路由

vue实现子路由

Vue 实现子路由的方法 在 Vue 中实现子路由主要通过 Vue Router 完成,以下是具体实现步骤: 安装 Vue Router 确保项目中已安装 Vue Router,若未安装,可以通过以…

vue实现内部路由

vue实现内部路由

Vue 内部路由实现方法 Vue 内部路由可以通过 Vue Router 实现,以下是具体实现步骤: 安装 Vue Router 在项目中安装 Vue Router 依赖: npm install…

vue实现路由标签

vue实现路由标签

路由标签的实现方法 在Vue中实现路由标签通常涉及使用vue-router和动态组件。以下是几种常见的方法: 使用router-link和keep-alive 通过router-link创建导航标签…

vue如何实现路由拦截

vue如何实现路由拦截

Vue 路由拦截的实现方法 在 Vue 中实现路由拦截主要通过 Vue Router 的导航守卫功能。以下是几种常见的实现方式: 全局前置守卫 使用 router.beforeEach 可以在路由跳…

vue这么实现路由过滤

vue这么实现路由过滤

Vue 路由过滤的实现方法 在 Vue 中实现路由过滤通常涉及对路由的访问权限或条件进行控制,以下是几种常见方法: 使用路由守卫(Navigation Guards) 路由守卫可以在路由跳转前进行拦…