如何在 React 中实现全局路由守卫?

本文介绍了如何在 React 中实现类似 Vue 的全局路由守卫功能。通过结合 ReactRoute 库,创建一个名为 UseAuth 的组件来处理路由守卫。需求包括:未登录时重定向至登录页,已登录时跳转至管理页面,以及未匹配路径时跳转至404页面。文章详细阐述了每个需求的实现逻辑,并提供了可能造成死循环的情况下的解决方案,以防止程序陷入死循环。最后,作者提供了源码供读者参考学习。
摘要由CSDN通过智能技术生成

前言

使用过 vue 的小伙伴都知道,如果想在 vue 中实现全局路由守卫,只需要在 beforeEach 中写路由守卫逻辑即可。

但是如果使用 react 的话,应该怎么做呢?

在 react 中,其实是没有 beforeEach 的,如果需要实现路由守卫,需要结合 ReactRoute 路由库,自己手动搓一个路由守卫。

本篇文章作者会结合自己的博客管理系统所用到的路由守卫进行演示。

(文章篇幅较详细,想直接看代码的可以到最后去 clone 一份源码)

需求

我的这个管理系统对于路由守卫的要求相对简单,需求如下:

  1. 进入博客管理系统,判断是否登录,未登录则跳转登录页(/login)
  2. 如果已经登录,则跳转管理页面(/mangement)
  3. 如果已经登录但是不能匹配到路径,则跳转404页面(/404)

最主要的功能还是1和2,如果你已经明白需求了,那就继续往下看吧!

实现

基本路由

如果不使用路由守卫,如何在 react 中实现路由?

文档如下:

 我们先按着文档实现一个基本的路由格式,在 app.tsx 中实现如下:

//app.tsx
import React from 'react'
import { BrowserRouter as Router } from 'react-router-dom'
import GetRouter from './components/getRouter'

const App = () => {
  return (
    <Router>
       <GetRouter />
    </Router>
  )
}

export default App

我简单的把路由信息进行了封装,下面是GetRouter 文件:

//./components/getRouter
import { useRoutes } from 'react-router-dom'
import routes from '../router'

export default function GetRouter() {
  let
  • 16
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
React-router6实现全局路由守卫可以通过使用`Routes`组件及其子组件的`element`属性实现。 首先,在顶层组件使用`Routes`组件来定义所有的路由,并在需要进行路由守卫的路由组件添加`element`属性,该属性为一个函数,用于在路由跳转前进行判断。 例如,我们可以在`Routes`组件定义一个需要进行路由守卫的路由: ``` import { Routes, Route, useNavigate } from 'react-router-dom'; const PrivateRoute = ({ element, ...rest }) => { const navigate = useNavigate(); const isLoggedIn = localStorage.getItem('isLoggedIn'); if (isLoggedIn) { return <Route {...rest} element={element} />; } else { navigate('/login'); return null; } }; const App = () => { return ( <Routes> <PrivateRoute path="/" element={<Home />} /> <Route path="/login" element={<Login />} /> </Routes> ); }; ``` 在上述代码,我们定义了一个名为`PrivateRoute`的组件,该组件接受一个`element`属性,该属性为一个函数,用于在路由跳转前进行判断。该组件首先从`localStorage`获取用户登录状态,如果用户已登录,则返回一个带有`element`属性的`Route`组件;如果用户未登录,则使用`useNavigate`钩子将路由导航至登录页面,并返回`null`。 在`App`组件,我们使用`Routes`组件来定义所有的路由。对于需要进行路由守卫的路由,我们将其使用`PrivateRoute`组件进行包装,并将其`element`属性设置为需要进行路由守卫的组件。对于不需要进行路由守卫的路由,我们直接使用`Route`组件进行定义。 这样,我们就成功地实现React-router6全局路由守卫

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JacksonChen_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值