当前位置:首页 > 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;
}

自定义路由组件

react如何拦截路由

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

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

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

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

全局路由拦截

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

react如何拦截路由

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实现路由拦截式懒加载:

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

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

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

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

相关文章

如何学react

如何学react

学习 React 的基础知识 React 是一个用于构建用户界面的 JavaScript 库。学习 React 的第一步是掌握其核心概念,包括组件、状态(State)、属性(Props)和生命周期方法…

vue实现路由

vue实现路由

Vue 路由的实现方法 Vue 路由可以通过 Vue Router 库来实现,Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue Router…

vue实现路由守卫

vue实现路由守卫

路由守卫的基本概念 路由守卫是 Vue Router 提供的一种机制,用于在路由跳转前后执行特定的逻辑。通过路由守卫,可以实现权限控制、页面访问限制、数据预加载等功能。 全局前置守卫 使用 rout…

vue实现路由跳转

vue实现路由跳转

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

vue实现动态路由按钮

vue实现动态路由按钮

Vue 实现动态路由按钮的方法 动态路由按钮的实现通常涉及权限控制,根据用户角色或权限动态显示或隐藏路由按钮。以下是几种常见方法: 基于路由元信息(meta)和v-if控制 在路由配置中添加权限标…

react 如何引入jquery

react 如何引入jquery

引入 jQuery 到 React 项目 在 React 项目中引入 jQuery 可以通过多种方式实现,但需要注意 React 和 jQuery 操作 DOM 的方式可能冲突,因此建议仅在必要时使用…