【个人笔记】Vue和React的简单路由拦截

之前一直基本都是用Vue开发,后来有几个项目改用React,实话说React做图表类后台监控确实真香,组件开发和Jsx语法也有点香的味道,不过相比之下。React的路由就没有Vue的舒服。
React-router不像Vue-router那样简便,很多东西需要自行去写,也没有提供类似于router-beforeEach的路由守卫,而React要实现路由守卫需要自己去写,基于我的项目我发现了一种比较简单的方式
//先介绍我的React路由配置
/router/index.js
<Router history={createBrowserHistory()}>
    <Switch>
        <Route exact path='/' component={Login}></Route>
        {
            routermap.map(item=>{                       //routermap根据你的实际路由去写
                return(
                    <Route path={item.path} render={()=>
                        sessionStorage.getItem('user')?<Content path={item.path} component={item.val} />:<Redirect to ="/"/>                         //我是使用了sessionStorage暂存了一个登录标记,Content是一个公用组件(例如:可以是你的导航栏之类的,公用组件内包含着你的内容,内容根据路由跳转而变化,这样基本就可以形成一个路由的拦截)
                        } 
                    />
                )
            })
        }
        
    </Switch>
</Router>
//在Content组件内
<Content style={{height:'100%',width:'100%',background:'#1B2426'}}>
    <Route exact path='/Monitor' component={Monitor}></Route>
    <Route exact path='/Device' component={Device}></Route>
</Content>                //这是内容配置
//还需要引入withRouter,这个是把你的组件包裹在Route里面,如果不配置,例如this.props.location.pathname这个值就取不到的,然后在componentWillUnmount中把sessionStorage清除掉,这样你回去登录页就没办法返回了
//而vue-router就简单很多了,在Main.js里面
router.beforeEach((to, from, next) => { // 路由守卫
    if (to.meta.requiresAuth) {
        var name = sessionStorage.getItem('loginname');
        if (name) {
            next();
        } else {
            next();
        }
    } else {
        next();
    }
    if (from.name == 'Login' && name == null || from.name == '*' && name == null) {
        next('/')
    }
    if (to.name == 'Login' && name || from.name == '*' && name) {
        sessionStorage.removeItem('loginname')
        next('/')
    }
})

vue 的路由拦截提供了api简单很多,但是写起来感觉就没有react配的高大上了。。。

VueReact都是流行的前端框架,它们都有自己的路由系统。下面是VueReact路由的区别和举例: 1. 路由配置方式不同 Vue使用Vue Router来管理路由,它的路由配置是通过路由表来实现的。路由表是一个数组,其中每个对象都代表一个路由。每个路由对象都包含路径、组件等属性。 React使用React Router来管理路由,它的路由配置是通过JSX来实现的。JSX语法可以直接嵌入路由信息,从而实现路由配置。 下面是VueReact路由配置的示例代码: Vue路由配置: ``` const router = new VueRouter({ routes: [ { path: '/', component: Home }, { path: '/about', component: About } ] }) ``` React路由配置: ``` <Router> <Switch> <Route exact path="/" component={Home} /> <Route path="/about" component={About} /> </Switch> </Router> ``` 2. 路由跳转方式不同 在Vue中,可以使用`this.$router.push()`方法来进行路由跳转。这个方法会将当前路由推入路由历史栈中,从而实现路由跳转。在React中,可以使用`<Link>`组件或者`history.push()`方法来进行路由跳转。`<Link>`组件会在点击时将路由推入路由历史栈中,而`history.push()`方法则需要手动调用。 下面是VueReact路由跳转的示例代码: Vue路由跳转: ``` // 在组件中调用 this.$router.push('/about') ``` React路由跳转: ``` // 使用Link组件 <Link to="/about">About</Link> // 使用history.push()方法 history.push('/about') ``` 3. 路由参数传递方式不同 在Vue中,可以使用路由参数来传递参数。通过`$route.params`对象可以获取路由参数。在React中,可以使用URL参数来传递参数。通过`props.match.params`对象可以获取URL参数。 下面是VueReact路由参数传递的示例代码: Vue路由参数传递: ``` // 在路由表中定义参数 { path: '/user/:id', component: User } // 在组件中读取参数 this.$route.params.id ``` React路由参数传递: ``` // 在路由表中定义参数 <Route path="/user/:id" component={User} /> // 在组件中读取参数 props.match.params.id ``` 总之,VueReact路由虽然都实现了前端路由功能,但是在路由配置方式、路由跳转方式和路由参数传递方式等方面存在差异。开发者应该根据项目需求和个人喜好选择适合自己的框架。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值