当前位置:首页 > 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
分享给朋友:

相关文章

vue 路由实现

vue 路由实现

Vue 路由实现方法 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是实现 Vue 路由的基本步骤: 安装 Vue Router 使用 npm 或 ya…

vue实现路由导航

vue实现路由导航

Vue 路由导航的实现 Vue 中实现路由导航通常使用 Vue Router 库。以下是具体实现方法: 安装 Vue Router 在项目中安装 Vue Router 依赖: npm inst…

vue实现点击跳转路由

vue实现点击跳转路由

vue实现点击跳转路由的方法 在Vue中实现点击跳转路由,可以通过以下几种方式完成,具体取决于项目使用的路由管理工具(如Vue Router)以及需求场景。 使用router-link组件 rou…

react如何取消渲染

react如何取消渲染

取消渲染的方法 在React中,取消渲染通常指的是在某些条件下阻止组件渲染或中断正在进行的渲染过程。以下是几种常见的方法: 条件渲染 通过条件判断决定是否渲染组件或部分内容。可以使用if语句或三元…

react moment如何使用

react moment如何使用

安装 react-moment 通过 npm 或 yarn 安装 react-moment: npm install react-moment 或 yarn add react-moment…

vue实现路由

vue实现路由

Vue 路由的实现方法 Vue 中实现路由通常使用 Vue Router 库。以下是具体的实现步骤: 安装 Vue Router 在项目中通过 npm 或 yarn 安装 Vue Router:…