当前位置:首页 > React

react实现beforeEach

2026-01-26 14:17:11React

React 实现类似路由守卫的 beforeEach 功能

在 React 中实现类似 Vue 路由守卫的 beforeEach 功能,可以通过 React Router 提供的导航守卫机制结合自定义逻辑完成。

使用 React Router v6 的导航守卫

React Router v6 提供了 useNavigateuseLocation 钩子,结合 useEffect 可以实现路由跳转前的拦截逻辑。

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

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

  useEffect(() => {
    // 在这里添加路由跳转前的逻辑
    const isAuthenticated = checkAuth(); // 自定义认证检查
    if (!isAuthenticated && location.pathname !== '/login') {
      navigate('/login', { replace: true });
    }
  }, [location, navigate]);

  return children;
}

自定义高阶组件封装

可以创建一个高阶组件来封装路由守卫逻辑,使代码更易于复用。

function withRouterGuard(WrappedComponent, guardFn) {
  return function(props) {
    const navigate = useNavigate();
    const location = useLocation();

    useEffect(() => {
      guardFn({ navigate, location });
    }, [location, navigate]);

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

在路由配置中应用守卫

可以在路由配置中为需要保护的路由添加守卫组件。

const routes = [
  {
    path: '/',
    element: (
      <RouterGuard>
        <HomePage />
      </RouterGuard>
    ),
  },
  {
    path: '/dashboard',
    element: (
      <RouterGuard>
        <Dashboard />
      </RouterGuard>
    ),
  },
];

实现完整的认证流程示例

function App() {
  return (
    <Routes>
      <Route path="/login" element={<Login />} />
      <Route
        path="/protected"
        element={
          <RequireAuth>
            <ProtectedPage />
          </RequireAuth>
        }
      />
    </Routes>
  );
}

function RequireAuth({ children }) {
  const auth = useAuth();
  const location = useLocation();

  if (!auth.user) {
    return <Navigate to="/login" state={{ from: location }} replace />;
  }

  return children;
}

处理异步验证逻辑

对于需要异步验证的场景,可以使用 Promise 或 async/await。

useEffect(() => {
  const checkAccess = async () => {
    const hasAccess = await verifyUserAccess();
    if (!hasAccess) {
      navigate('/no-access');
    }
  };
  checkAccess();
}, [location, navigate]);

这些方法提供了在 React 中实现路由跳转前逻辑的各种方式,可以根据具体需求选择最适合的实现方案。

react实现beforeEach

标签: reactbeforeEach
分享给朋友:

相关文章

如何学react

如何学react

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

react如何使用

react如何使用

React 的基本使用 React 是一个用于构建用户界面的 JavaScript 库,以下是一些核心概念和使用方法。 安装 React 通过 create-react-app 快速搭建 React…

如何评价react native

如何评价react native

React Native 的优势 跨平台开发效率高:基于 JavaScript 和 React 语法,可同时开发 iOS 和 Android 应用,减少重复代码量。性能接近原生:通过原生组件渲染,性能…

react 如何执行

react 如何执行

安装 Node.js 和 npm React 开发需要 Node.js 环境,因为它提供了 npm(或 yarn)包管理工具。从 Node.js 官网 下载并安装最新 LTS 版本。安装完成后,在终端…

如何react页面

如何react页面

创建 React 页面 使用 create-react-app 快速初始化项目: npx create-react-app my-app cd my-app npm start 基础页面结构 在 s…

如何记忆react

如何记忆react

理解核心概念 React的核心概念包括组件、状态(state)、属性(props)、生命周期方法(类组件)和钩子(函数组件)。掌握这些基础概念是记忆React的关键。组件是React应用的构建块,分为…