ProtectedRoute 路由守卫

最后更新:2026-10-28

ProtectedRoute 路由守卫

路由守卫是「进入页面前先检查权限」的模式:包一层 ProtectedRoute,未登录就重定向到 /login 并记录来源页,登录后回跳。React 没有内置守卫,靠条件渲染 + Navigate/useNavigate 组合实现。

分组路由与状态管理
类型模式

ℹ️ 说明 编辑器将 JSX 转译为 JavaScript 后在沙箱中渲染真实界面;组件自动挂载,无需手写 render 调用。

📝 语法

import { Navigate, Outlet } from 'react-router-dom'

function ProtectedRoute({ isAuth }) {
  if (!isAuth) {
    // 未登录:重定向到登录页,state 记住「从哪来」
    return <Navigate to="/login" replace state={{ from: location.pathname }} />
  }
  return <Outlet />   // 已登录:渲染子路由
}

// 用法:
// <Route element={<ProtectedRoute isAuth={user} />}>
//   <Route path="/admin" element={<Admin />} />
// </Route>

⚙️ 参数

isAuth(自行约定)权限判定:布尔、角色数组或异步状态均可,由你的登录态决定。
redirect(自行约定)未通过时的去向:重定向地址或提示 UI,按项目需要设计。

返回值:无返回值,作为编码模式使用

▶ 示例

示例可直接运行:展开后自动渲染,编辑代码即时生效。

输出结果:

未登录点「管理后台」被拦到登录页;点「去登录并回跳」后成功进入后台——对应 Navigate 重定向 + 登录后回跳的守卫流程(模拟演示)。

💡 要点

⚠️ 注意 前端守卫只是体验层:静态资源与接口仍能被直接访问,敏感数据必须由服务端再校验一次权限。
💡 提示 重定向时把来源页存进 state(from: location.pathname),登录成功后 navigate(state.from ?? '/home') 实现精准回跳。
ℹ️ 说明 权限来自异步请求(如 /me 接口)时,守卫先显示 loading 再放行,避免「闪一下登录页」。
更多案例整理中,敬请期待。

📚 相关教程

❓ 常见问题

Q Navigate 组件和 useNavigate 有何区别?
A Navigate 是「渲染即跳转」,适合在 JSX 分支里声明式重定向;useNavigate 是命令式函数,适合事件回调。两者底层相同。
Q 登录后怎么回到原来想去的页面?
A 重定向前存 state={{ from: location.pathname }},登录成功后 navigate(location.state?.from ?? '/home')。
Q 角色权限(admin/vip)怎么扩展?
A 把 isAuth 换成角色判断:守卫内检查 allowedRoles.includes(user.role),再包一层 RoleRoute 组件即可复用。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏