当前位置:首页 > React

react如何拦截路由

2026-02-12 02:49:08React

拦截路由的方法

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

使用React Router的导航守卫

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

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

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

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

  return children;
}

自定义路由组件

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

function PrivateRoute({ element }) {
  const auth = useAuth(); // 自定义认证hook

  return auth ? element : <Navigate to="/login" replace />;
}

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

全局路由拦截

在根组件中添加全局路由监听:

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

  useEffect(() => {
    if (requiresAuth(location.pathname) && !isLoggedIn()) {
      navigate('/login');
    }
  }, [location]);
}

路由跳转前的确认

使用prompt组件实现离开页面前的确认提示(React Router v5):

import { Prompt } from 'react-router-dom';

function EditPage() {
  const [isBlocking, setIsBlocking] = useState(true);

  return (
    <>
      <Prompt
        when={isBlocking}
        message="您有未保存的更改,确定要离开吗?"
      />
      {/* 页面内容 */}
    </>
  );
}

在React Router v6中需要通过自定义useBlocker实现类似功能。

动态路由加载

结合React.lazy和Suspense实现路由拦截式懒加载:

react如何拦截路由

const Dashboard = React.lazy(() => import('./Dashboard'));

<Route
  path="/dashboard"
  element={
    <Suspense fallback={<Loader />}>
      <PrivateRoute>
        <Dashboard />
      </PrivateRoute>
    </Suspense>
  }
/>

以上方法可以根据具体需求组合使用,实现灵活的路由拦截逻辑。对于复杂场景,可以考虑使用第三方库如react-router-guards或自定义路由配置中心化管理。

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

相关文章

vue路由实现介绍

vue路由实现介绍

Vue 路由实现介绍 Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。它通过动态映射组件到路由实现页面无刷新切换,同时支持嵌套路由、路由参数、导航守卫等高级功能…

react如何迭代

react如何迭代

在 React 中迭代数组或对象 React 提供了多种方式来处理数组或对象的迭代,以下是常见的方法: 使用 map 方法迭代数组 map 是 JavaScript 数组的内置方法,常用于在 Rea…

如何配置react

如何配置react

配置React项目的步骤 安装Node.js和npm 确保系统已安装Node.js(包含npm)。可通过官网下载并安装最新版本。安装完成后,运行以下命令验证版本: node -v npm -v 创建…

react项目如何

react项目如何

创建React项目 使用create-react-app工具快速初始化项目。确保已安装Node.js(建议版本≥12.0.0),运行以下命令生成新项目: npx create-react-app m…

react路由如何使用

react路由如何使用

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

react如何获取光标

react如何获取光标

获取光标位置的方法 在React中获取光标位置通常涉及处理输入框或文本区域的onChange或onSelect事件。以下是几种常见的方法: 通过selectionStart和selectionEnd…