v6路由权限验证机制

LongJudy +0/-0 0 0 正常 2025-12-24T07:01:19 React-Router · 权限验证

React Router v6 路由权限验证机制

前言

React Router v6 相比 v5 在路由权限验证方面有了重大变化,不再支持直接在 Route 组件上使用 component 属性,而是需要通过自定义 Hook 和路由守卫来实现权限控制。

核心实现方案

1. 创建权限验证 Hook

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

const useAuth = () => {
  const navigate = useNavigate();
  
  useEffect(() => {
    // 检查用户权限
    const token = localStorage.getItem('token');
    if (!token) {
      navigate('/login', { replace: true });
    }
  }, [navigate]);
};

2. 实现受保护路由组件

import { Outlet } from 'react-router-dom';
import { useAuth } from './hooks/useAuth';

const ProtectedRoute = () => {
  useAuth();
  return <Outlet />;
};

3. 配置路由规则

import { createBrowserRouter, RouterProvider } from 'react-router-dom';

const router = createBrowserRouter([
  {
    path: '/',
    element: <App />, // 根组件
    children: [
      {
        index: true,
        element: <Home />
      },
      {
        path: 'dashboard',
        element: <ProtectedRoute />, // 受保护的路由
        children: [
          { index: true, element: <Dashboard /> }
        ]
      }
    ]
  }
]);

复现步骤

  1. 在项目中安装 React Router v6:npm install react-router-dom@latest
  2. 创建 useAuth Hook 并实现权限检查逻辑
  3. 构建 ProtectedRoute 组件包装受保护的路由
  4. 在路由配置中使用 ProtectedRoute 包裹需要验证的路由
  5. 测试未登录用户访问受保护路由时是否正确跳转到登录页

注意事项

  • v6 中 useLocationuseNavigate 的使用方式与 v5 有差异
  • 权限验证逻辑应放在组件挂载时执行
  • 建议将权限检查逻辑抽象为独立的 Hook 便于复用
推广
广告位招租

讨论

0/2000
火焰舞者
火焰舞者 · 2026-01-08T10:24:58
v6权限验证真坑,别再用那种简单hook了,得加个useEffect判断,不然路由跳转会死循环。
Quincy600
Quincy600 · 2026-01-08T10:24:58
别信那些教程直接套用,权限验证得结合token过期时间,不然用户登着登着就懵了。
神秘剑客1
神秘剑客1 · 2026-01-08T10:24:58
受保护路由组件套Outlet是基础操作,但别忘了加个loading状态,用户体验差到爆。
HeavyEar
HeavyEar · 2026-01-08T10:24:58
路由守卫写法太随意,建议封装成useAuthCheck这种通用Hook,不然代码重复率高得离谱。
梦境旅人
梦境旅人 · 2026-01-08T10:24:58
别只验证token,还得结合用户角色,不然权限控制形同虚设,后台接口才是关键。
Carl180
Carl180 · 2026-01-08T10:24:58
路由配置里children嵌套太深容易出错,建议把受保护路由抽成单独文件管理。
Xavier88
Xavier88 · 2026-01-08T10:24:58
导航守卫别只用useNavigate,要配合useLocation做跳转前判断,否则跳转逻辑混乱。
WetSong
WetSong · 2026-01-08T10:24:58
权限验证hook不加deps数组真危险,可能造成无限重渲染,性能和bug双杀。
Ruth680
Ruth680 · 2026-01-08T10:24:58
v6路由结构改了,之前的v5权限方案直接崩,老项目升级得小心,别贸然上新。
Xavier722
Xavier722 · 2026-01-08T10:24:58
建议把权限控制抽象成一个Context,不然每个页面都要重复写hook,维护成本太高。