路由守卫
需要先安装react-cookie
yarn add react-cookies -S
定义路由验证文件
import React from 'react'
import {useNavigate} from 'react-router-dom'
import cookie from 'react-cookies'
class AuthRouter extends React.Component{
constructor(props)
{
super(props)
this.state = {}
}
render()
{
const AuthLogin = () =>
{
let navigate = useNavigate()
React.useEffect(() => {
var LoginUser = cookie.load('LoginUser') ? cookie.load('LoginUser') : {}
if(JSON.stringify(LoginUser) === "{}")
{
navigate('/user/base/login')
}
})
return false
}
return (
<>
{
this.props.auth && <AuthLogin />
}
{this.props.component}
</>
)
}
}
export default AuthRouter
路由入口封装文件中的使用方式
import React from 'react'
import {Routes, Route, Outlet} from 'react-router-dom'
import AuthRouter from './auth'
import Home from '@/components/home.js'
const ModulesFile = require.context('./',true,/index.js$/)
const RouterMap = []
ModulesFile.keys().reduce((modules, modulePath) => {
const ModuleName = modulePath.replace(/^.\/(.*)\.js/,'$1')
if(ModuleName !== 'index')
{
const ModuleList = ModulesFile(modulePath)
RouterMap.push(...ModuleList.default)
}
return RouterMap
}, {})
class RouterList extends React.Component{
constructor(props)
{
super(props)
this.state = {}
}
render()
{
return (
<>
<Routes>
{/* 默认首页 */}
<Route path="/" element={<Home />}></Route>
<Route path="/" element={<><Outlet /></>}>
{
RouterMap.map((item, index) => {
return (
<Route key={index} path={item.path} element={<AuthRouter auth={item.auth} component={<item.component />}></AuthRouter>}>
{item.children &&
item.children.map((son, idx) => <Route key={idx} path={son.path} element={<AuthRouter auth={son.auth} component={<son.component />}></AuthRouter>}></Route>)
}
</Route>
)
})
}
</Route>
</Routes>
</>
)
}
}
export default RouterList
路由的结构
const base = [
{
path: "base/profile",
name: 'profile',
component: profile,
auth: true
},
{
path: "base/login",
name: 'login',
component: login,
}
]
export default base