zoukankan      html  css  js  c++  java
  • 手动封装react的路由守卫(2018/12/19)

    一、路由守卫使用场景
    当用户登录的时候或者某些情况下需要获取用户的权限所以要做一个高阶组件的渲染劫持
     
    二、路由守卫的使用
    在component文件夹下新建一个common文件夹用来封装路由守卫,然后引入到需要使用路由守卫的组件当中
    App.js
     
    import React, { Component } from 'react';
    import {HashRouter as Router,Route,NavLink,Link,Switch,Redireact} from "react-router-dom"
    import Home from './components/home/home'
    import List from './components/list/list'
    import Login from './components/login/login'
    import MyRouter  from "./components/common/myRouter"  //引入路由守卫
    class App extends Component {
      render() {
        return (
         <div>
            <Router>
                <div>
                  <Switch>   //这里要用Switch,只匹配一个路由路径,不然路由守卫不起作用
                  <Route path="/home" component={Home}/>
                  <MyRouter path="/list" component={List} flag={false}/> //在list组件中应用路由守卫,这里的path,component,flag会传到myRouter中
                  <Route path="/login" component={Login}/>
                  </Switch>
                   <div id="footer">
                       <NavLink to="/home">首页</NavLink>
                       <NavLink to="/list">列表</NavLink>
                    </div>
     
                </div>
            </Router>
           
         </div>
        );
      }
    }
     
    export default App;
     
     
    myRouter.js
    import React,{Component} from "react"
    import  {Route,Redirect} from "react-router-dom"
     
    class myRouter extends Component{
        render(){
            let {path,component,flag} =this.props   //这是从外部 (App.js)中传过来的path和component,flag中的值
            return(
     
                flag?<Route path={path} component={component}/>:<Redirect to="/login"/> //当flag是true的时候显示对应的组件页面,当flag为false的时候跳转到登录页面   这里使用的就是高阶组件中的渲染劫持
                )
        }
    }
    export default myRouter
     
     
     
    三、react的懒加载
            通过异步组件的方式进行懒加载,你访问到相应模块了就进行加载,没有访问到相应的模块就不加载,这就是路由的懒加载
            使用的场景:
                                react-loadable  也叫做按需加载
     
    安装 cnpm i react-loadable  --dev
     
    App.js
     
    import Loadable from "react-loadable"  //引入 react-loadable
    const Home =Loadable({   //如果组件需要用到懒加载就用这种方式引入组件
      loader:()=>import("./components/home/home"),  //引入home组件
      loading:"Loading...................."   //这里如果是“”加载的时候显示的是“”中的值,如果不加引号代表加载的时候显示的是一个组件中的内容,需要引入这个组件
    })
     
    class App extends Component {
      render() {
        return (
         <div>
            <Router>
                <div>
                  <Switch>   //这里要用Switch,只匹配一个路由路径,不然路由守卫不起作用
                  <Route path="/home" render={()=>{  //如果是懒加载的话就要用render渲染组件
                    return <Home/>
                  }}/>
                  </Switch>
                   <div id="footer">
                       <NavLink to="/home">首页</NavLink>
                    </div>
                </div>
            </Router>
         </div>
        );
      }
    }
    export default App;
  • 相关阅读:
    Javascript+css 实现网页换肤功能
    pdf版电子书
    网络编辑日常工作流程大观
    实例构造器和类型构造器的一些比较
    详解在Win2003安装光盘中集成SCSI驱动
    css学习日记
    Asp.net开发常用DOS命令
    hosts表的作用
    对于Redis中设置了过期时间的Key,你需要知道这些内容
    为什么领导不喜欢提拔老实人?退休的领导说出了实话
  • 原文地址:https://www.cnblogs.com/zsrTaki/p/11510880.html
Copyright © 2011-2022 走看看