当前位置:首页 > React

react实现路由守卫

2026-01-27 08:11:07React

React 路由守卫实现方法

在 React 中实现路由守卫(Route Guard)可以通过多种方式完成,以下是常见的几种方法:

使用高阶组件(HOC)包装路由

创建高阶组件来检查用户权限或登录状态,再决定是否渲染目标组件:

const withAuth = (Component) => {
  return (props) => {
    const isAuthenticated = checkAuth(); // 自定义认证逻辑
    return isAuthenticated ? (
      <Component {...props} />
    ) : (
      <Navigate to="/login" replace />
    );
  };
};

// 使用方式
<Route path="/protected" element={withAuth(ProtectedComponent)} />

利用 React Router v6 的 element 属性

在路由配置中直接进行守卫逻辑判断:

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

// RequireAuth 组件实现
function RequireAuth({ children }) {
  const auth = useAuth();
  if (!auth.user) {
    return <Navigate to="/login" />;
  }
  return children;
}

自定义路由组件

创建自定义路由组件封装守卫逻辑:

const PrivateRoute = ({ component: Component, ...rest }) => {
  const { isAuthenticated } = useAuth();
  return (
    <Route
      {...rest}
      render={(props) =>
        isAuthenticated ? (
          <Component {...props} />
        ) : (
          <Redirect to={{ pathname: "/login" }} />
        )
      }
    />
  );
};

// 使用方式
<PrivateRoute path="/admin" component={AdminPanel} />

使用路由拦截器

在全局路由变化时进行拦截:

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

  useEffect(() => {
    if (!isAuthPage(location.pathname) && !isAuthenticated()) {
      navigate('/login', { state: { from: location } });
    }
  }, [location]);

  return <Routes>...</Routes>;
}

角色权限控制

对于需要基于角色的权限控制:

react实现路由守卫

const RoleRoute = ({ roles, children }) => {
  const userRole = getUserRole(); // 获取用户角色
  return roles.includes(userRole) ? children : <Navigate to="/unauthorized" />;
};

// 使用方式
<Route
  path="/admin"
  element={
    <RoleRoute roles={['admin']}>
      <AdminPage />
    </RoleRoute>
  }
/>

注意事项

  • 守卫逻辑应该与路由配置解耦,便于维护
  • 考虑添加加载状态处理异步验证
  • 登录后重定向到原始请求页面
  • 对于嵌套路由,守卫逻辑需要应用到每个需要保护的层级

以上方法可以根据具体项目需求组合使用,React Router v6 推荐使用 element 属性配合自定义组件的方式实现路由守卫。

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

相关文章

vue路由实现介绍

vue路由实现介绍

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

vue实现路由导航

vue实现路由导航

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

react如何更新

react如何更新

更新 React 版本的方法 检查当前 React 版本 运行以下命令查看项目中安装的 React 版本: npm list react 更新 React 及相关依赖 通过 npm 或 yarn…

如何创建react

如何创建react

创建React项目的步骤 使用Create React App工具快速搭建React项目。确保已安装Node.js(版本需≥14.0.0)和npm(版本需≥5.6)。 打开终端或命令行工具,运行以下…

react 如何运行

react 如何运行

运行 React 项目的步骤 安装 Node.js 确保系统已安装 Node.js(建议版本 16+),可通过官网下载并安装。安装后验证版本: node -v npm -v 创建 React 项目…

如何用react

如何用react

使用React的基本步骤 安装Node.js和npm 确保系统已安装Node.js和npm。Node.js自带npm,可从官网下载安装包。安装完成后,通过命令行验证版本: node -v npm -…