当前位置:首页 > React

react如何拦截路由

2026-03-31 05:58:41React

拦截路由的方法

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

使用React Router的导航守卫

React Router v6提供了useNavigateuseBeforeUnload等钩子来实现路由拦截:

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

function PrivateRoute({ children }) {
  const navigate = useNavigate();
  const location = useLocation();
  const isAuthenticated = checkAuth(); // 自定义认证逻辑

  if (!isAuthenticated) {
    navigate('/login', { state: { from: location } });
    return null;
  }

  return children;
}

自定义高阶组件

react如何拦截路由

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

function withAuth(Component) {
  return function WrappedComponent(props) {
    const isAuth = /* 认证逻辑 */;

    if (!isAuth) {
      return <Navigate to="/login" />;
    }

    return <Component {...props} />;
  };
}

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

路由配置拦截

react如何拦截路由

在路由配置中直接添加拦截逻辑:

<Routes>
  <Route 
    path="/dashboard" 
    element={
      <RequireAuth>
        <Dashboard />
      </RequireAuth>
    } 
  />
</Routes>

路由跳转确认

实现离开页面前的确认提示:

import { unstable_useBlocker as useBlocker } from 'react-router-dom';

function EditPage() {
  const [isDirty, setIsDirty] = useState(false);

  useBlocker(
    ({ nextLocation }) => isDirty && 
    !window.confirm('确定要离开吗?未保存的更改将会丢失')
  );

  // 表单修改时设置isDirty为true
}

数据预加载拦截

在路由跳转前预加载数据:

const router = createBrowserRouter([
  {
    path: '/',
    element: <Layout />,
    children: [
      {
        path: 'teams/:teamId',
        element: <Team />,
        loader: async ({ params }) => {
          return fetchTeam(params.teamId); // 数据加载完成前会阻塞导航
        }
      }
    ]
  }
]);

每种方法适用于不同场景,可根据具体需求选择实现方式。React Router v6推荐使用loader和action来处理数据相关拦截,使用组件组合方式处理UI层拦截。

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

相关文章

如何学习react

如何学习react

学习 React 的步骤 理解基础概念 React 是一个用于构建用户界面的 JavaScript 库。学习 React 之前,建议掌握 JavaScript 的基础知识,包括 ES6+ 语法(如箭头…

react 如何执行

react 如何执行

安装 React 确保 Node.js 安装在本地环境中。通过以下命令创建新的 React 项目: npx create-react-app my-app 进入项目目录并启动开发服务器:…

vue实现路由跳转

vue实现路由跳转

Vue 路由跳转的实现方式 在 Vue 中,路由跳转可以通过 vue-router 实现,以下是几种常见的方法: 声明式导航(模板中使用 <router-link>) 通过 <ro…

react如何收录

react如何收录

React 收录方法 React 的收录主要涉及搜索引擎优化(SEO)和预渲染技术。由于 React 是单页应用(SPA),默认情况下内容由 JavaScript 动态生成,可能导致搜索引擎爬虫难以收…

react如何diff

react如何diff

React Diff 算法原理 React 的 Diff 算法是 Virtual DOM 的核心部分,用于高效更新真实 DOM。其核心思想是通过对比新旧 Virtual DOM 树的差异,最小化 DO…

react如何同步

react如何同步

React 同步状态管理方法 在 React 中实现同步状态管理,可以通过以下多种方式实现: 使用 useState 和 useEffect 钩子 通过 useState 定义状态,使用 useEf…