码迷,mamicode.com
首页 > 其他好文 > 详细

react-导航守卫

时间:2020-09-07 19:11:02      阅读:43      评论:0      收藏:0      [点我收藏+]

标签:vue   direct   tst   reac   render   color   ken   set   切换   

在react中不像vue有专门的导航守卫,react路由实际上也是组件,利用组件的表达式制作配置导航守卫

路由原配置:<Route exact={true} strict={true} exact path=‘/home‘ component={Home} />

守卫配置:

<Route exact={true} strict={true} exact path=‘/home‘ render = {()=>(
isLogin ? (
<Home/>
)
:
(
<Redirect to="/login"/>
)
)}/>

component改成render表达式,添加isLogin判断字段(字段根据登录token等判定)每一个route组件都要配置比较麻烦:好处式不管显示导航与否:如果登录也有导航这时候每个导航按钮都可以切换路由,这样配置的导航不管点击哪个导航都会判断islogin并进入登录或指定页面

需要注意的点:在使用导航守卫方式配置路由的时候:render={()=>(...)}

 注意render时组件内的this.props获取不到history对象,component则可以如果用到在login组件内使用高阶函数:withRouter 

<Route exact={true} strict={true} exact path=‘/login‘ render={()=>(
<Login isLogin = {this.handlerLoginstatus}/>
)} />

这样在login组件内 就可以获取到props内的history对象了

整体步骤总结:

1:增加判断条件和isLogin辨析值

2:route配置改写render渲染判断组件

 <Route exact={true} strict={true} exact path=‘/home‘ render = {()=>(
                       isLogin ? (
                        <Home/>
                       )
                        :
                       (
                        <Redirect to="/login"/>
                       )
                   )}/>

3:login路由内渲染的login组件增加自定义事件用于子组件登录成功后通知跳转首页

<Route exact={true} strict={true} exact path=‘/login‘ render={()=>(
                        <Login isLogin = {this.handlerLoginstatus}/>
                   )} />
 handlerLoginstatus(){//子组件通知父组件更新登录状态-不然不会自动跳转到首页的
        console.log(‘handlerstatus触发了‘)
        this.setState({
            isLogin: true
        })
        console.log(this.state.isLogin)
    }

login.jsx

isLoginF(){
        this.props.isLogin()
        // 注意render时组件内的this.props获取不到history对象,component则可以如果用到在login组件内使用高阶函数:withRouter 
        console.log(this.props)
    }

如果不通知 登陆后跳转到首页将不会被更新因为判断的值isLogin更改后并没有刷新只是子组件更改了值所以要通知父组件更新isLogin值

子传父用自定义事件

react-导航守卫

标签:vue   direct   tst   reac   render   color   ken   set   切换   

原文地址:https://www.cnblogs.com/zbbk/p/13575582.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!