当前位置:首页 > React

react如何拦截路由

2026-02-26 12:41:47React

拦截路由的实现方法

在React中拦截路由通常用于权限控制、数据预加载或路由跳转前的确认操作。以下是几种常见方法:

使用React Router的导航守卫

React Router v6提供了useNavigateuseLocation钩子,结合useEffect可实现路由拦截:

react如何拦截路由

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

function AuthCheck({ children }) {
  const navigate = useNavigate();
  const location = useLocation();

  useEffect(() => {
    const isLoggedIn = checkAuth(); // 自定义认证检查
    if (!isLoggedIn && location.pathname !== '/login') {
      navigate('/login', { state: { from: location } });
    }
  }, [location, navigate]);

  return children;
}

自定义路由组件

创建高阶组件包装路由,实现权限控制:

react如何拦截路由

function PrivateRoute({ element, ...rest }) {
  const auth = useAuth(); // 自定义认证钩子

  return auth ? (
    <Route {...rest} element={element} />
  ) : (
    <Navigate to="/login" replace />
  );
}

// 使用方式
<PrivateRoute path="/dashboard" element={<Dashboard />} />

路由配置拦截

在路由配置中定义拦截逻辑:

const router = createBrowserRouter([
  {
    path: '/',
    element: <Root />,
    loader: () => {
      if (!authCheck()) throw new Response(null, { status: 401 });
      return null;
    },
    errorElement: <ErrorPage />
  }
]);

全局路由监听

通过路由事件监听实现全局拦截:

const App = () => {
  const location = useLocation();
  const navigate = useNavigate();

  useEffect(() => {
    const unlisten = () => {
      if (shouldBlockNavigation(location)) {
        if (window.confirm('确定要离开当前页面?')) {
          return true;
        }
        navigate(location.pathname, { replace: true });
        return false;
      }
    };
    return unlisten;
  }, [location, navigate]);
};

注意事项

  • 异步验证需配合Suspense处理加载状态
  • 重定向时考虑保留原路由状态(state)
  • 服务端渲染场景需适配SSR方案
  • 动态路由参数需在拦截逻辑中特殊处理

以上方法可根据具体场景组合使用,React Router v6推荐使用loader/action方案进行数据预检。

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

相关文章

如何改造react

如何改造react

改造 React 项目的关键方法 分析当前项目结构 通过评估现有组件、状态管理和依赖项,明确需要改进的部分。使用工具如 webpack-bundle-analyzer 识别性能瓶颈。 升级 Reac…

react如何衰减

react如何衰减

React 中的动画衰减效果实现 在 React 中实现衰减效果(如滚动衰减、拖动释放后的惯性滑动)通常需要结合物理动画原理或第三方动画库。以下是几种常见方法: 使用 CSS 动画和 @keyfra…

react如何引入echarts

react如何引入echarts

安装 ECharts 依赖 在 React 项目中安装 ECharts 核心库和 React 封装库: npm install echarts echarts-for-react 基础引入方式 创建…

react 如何获取dom

react 如何获取dom

获取 DOM 的方法 在 React 中,可以通过 useRef 或 createRef 来获取 DOM 节点。useRef 是函数组件中常用的方法,而 createRef 通常用于类组件。 使用…

react 如何修改state

react 如何修改state

修改 state 的基础方法 在 React 中,state 的修改必须通过 setState 方法(类组件)或 state 更新函数(函数组件)。直接修改 state 会导致组件不会重新渲染,且可能…

react路由如何使用

react路由如何使用

React 路由的基本使用 React 路由通常通过 react-router-dom 库实现,用于管理单页面应用(SPA)中的页面导航。 安装 react-router-dom: npm ins…