React Router Route Render渲染组件 权限校验
权限验证
render
Route render实现组件渲染
权限校验
设置routes数组,有id,auth,component这三个属性
auth为false,说明是不需要权限访问的组件,可以直接访问
auth为true,说明是需要权限(需要登录)访问的组件
isLogin为false,说明需要登录才能访问
isLogin为true,说明已经可以访问
登录组件里面实现改变父组件数组auth的逻辑
import React, { Component } from 'react';
import {
BrowserRouter as Router, Route,Link
} from 'react-router-dom'
import HomePage from './HomePage'
import Login from './Login'
import PositionPage from './PositionPage'
class Index extends Component {
routes = [
{
id: 1,
component: Login,
path: '/login'
},
{
id: 2,
component: PositionPage,
auth: true,
path: '/position'
},
{
id: 3,
component: HomePage,
auth: false,
path: '/homepage'
}
]
constructor() {
super();
this.state = {
routes: this.routes,
isLogin: false
}
}
//点击登录,显示路由匹配的相应组件
loginHandler=()=>{
this.setState({
isLogin:true
})
}
render() {
return (
<Router>
<Link to="/homepage">首页</Link>
<Link to="/position">职位管理</Link>
<hr/>
{
this.state.routes.map(item => {
//需要权限的路由组件,转到登录逻辑判断
//不需要权限的组件,直接匹配路由显示相应组件
if (item.auth) {
return (
<Route key={item.id} path={item.path} render={() => {
return this.state.isLogin ? <item.component></item.component> : <Login loginClick={this.loginHandler}></Login>
}}></Route>
)
} else {
return <Route key={item.id} path={item.path} render={()=><item.component></item.component>}></Route>
}
})
}
</Router>
);
}
}
export default Index;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端