react路由权限设置

react路由权限设置说明在react项目中有时我们的一些页面需要权限才能访问,这里以需要登录才能访问进行的设置在这里可以看到权限页面和关于页面是需要登录才能访问的importReact,{Component,useState,useEffect,useRef}from’react’;import{HashRouterasRouter,Route,NavLink,Redirect,Switch,useHistory}from”react-router-dom”;classAPP

大家好,又见面了,我是你们的朋友全栈君。

说明

在react项目中有时我们的一些页面需要权限才能访问,这里以需要登录才能访问进行的设置
在这里插入图片描述
在这里可以看到权限页面和关于页面是需要登录才能访问的


import React, { 
    Component,useState,useEffect ,useRef} from 'react';
import { 
    HashRouter as Router, Route, NavLink, Redirect, Switch ,useHistory} from "react-router-dom";
class APP extends Component { 
   
  
  render() { 
    
    return ( 
      <div>
        <Router>
          <NavLink to="/">首页</NavLink> | 
          <NavLink to="/about">关于</NavLink> |
          <NavLink to="/login">登录</NavLink> |
          <NavLink to="/private">权限</NavLink> |
      
          <br/>
          <Switch>
          <Route path="/" exact component={ 
   Home}></Route>
          //<Route path="/about" exact component={About}></Route>
          <Route path="/login" exact component={ 
   Login}></Route>
       
          <PrivatePage path="/private">
              <Private></Private>
          </PrivatePage>
            <PrivatePage path="/about">
              <About></About>
          </PrivatePage>
          </Switch>
        </Router>
      </div>
     );
  }
}
 
export default APP;

// 权限处理
// Private 登录后 可以进入,没有登录跳转到 login 登录页面
// Login 登录页面
// PrivatePage 页面(需要权限页面都包裹再里面)
// fakeAuth登录状态记录 isAuth 是否登录 | authentic 授权登录方法 signout 注销方法
const fakeAuth={ 
   
  isAuto:false, //默认非登录状态
  authentic(cb){ 
    
    this.isAuto=true;  //登录状态
    setTimeout(cb,200) //cb登录成功后要做的callback回调函数
  },
  signOut(cb){ 
   
    this.isAuto=false; //非登录状态
    setTimeout(cb,200) //cb注销成功后要做的callback回调函数
  }
}
// 所有需要权限页面都放入内部
function PrivatePage({ 
   children}){ 
   
  return <Route render={ 
   ({ 
   location})=>{ 
   
    //此处应特别注意 要么使得children通过克隆完全继承,要不使用userhistory方法不然退出功能无法找到history方法
     // let component = React.cloneElement(children,rest);
      // chilren 基础了 父组件的所有属性 history,location,match,赋值给component
      // return fakeAuth.isAuth?component:<Redirect to={ 
   {pathname:"/login",state:{from:location}}}/>
    return fakeAuth.isAuto?children:<Redirect to={ 
   { 
   pathname:'/login',state:{ 
   from:location}}}/> //将loacation赋值给from,传递过去
  }}/>
  
  
}

function Home() { 
   
  return (
    <div>
      <h1>首页</h1>
    </div>
  )
}
function About() { 
   
  return (
    <div>
      <h1>关于</h1>
    </div>
  )
}
function Login(props){ 
   
  let { 
   from}=props.location.state || { 
   from:{ 
   pathName:'/'}}
    // console.log(from,'上一个页面的loacation');
  // 通过props接收传递过来state也就是上一个页面的location ||默认首页
  return (
    <div>
      <h1>登录</h1>
      <button onClick={ 
   ()=>{ 
   
        fakeAuth.authentic(()=>{ 
   
          props.history.replace(from)
        })
      }}>按钮</button>
    </div>
  )
}
function Private(){ 
   
  let history=useHistory();//通过hooks方式拿到history

  return (
    <div>
      <p>需要权限的页面</p>
      <button onClick={ 
   ()=>{ 
   
        fakeAuth.signOut(
          history.replace('/login')
        )
      }}>退出</button>
    </div>
  )
}

踩坑的地方

要么使得children通过克隆完全继承,要不使用userhistory方法不然退出功能无法找到history方法
不然 Private页面退出功能报错

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138831.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c++查找文件的方法[通俗易懂]

    c++查找文件的方法[通俗易懂]CFileFindfinder;  BOOLbWorking=finder.FindFile(szBuf);unsignedshort slogtype=0;   while(bWorking) {    bWorking=finder.FindNextFile();    CStringstrfilename=fin

    2022年7月25日
    6
  • 自动化测试用例如何编写_测试用例设计流程思路

    自动化测试用例如何编写_测试用例设计流程思路前言用过pytest的小伙伴都知道,pytest的运行方式是非常丰富的,可以说是你想怎么运行怎么运行,想运行哪些运行哪些,那httprunner是否同样可以呢?运行用例的各种方式运行指定路径的用

    2022年7月28日
    4
  • SLAM学习笔记(十九)开源3D激光SLAM总结大全——Cartographer3D,LOAM,Lego-LOAM,LIO-SAM,LVI-SAM,Livox-LOAM的原理解析及区别

    SLAM学习笔记(十九)开源3D激光SLAM总结大全——Cartographer3D,LOAM,Lego-LOAM,LIO-SAM,LVI-SAM,Livox-LOAM的原理解析及区别本文为我在浙江省北大信研院-智能计算中心-情感智能机器人实验室-科技委员会所做的一个分享汇报,现在我把它搬运到博客中。由于参与分享汇报的同事有许多是做其他方向的机器人工程师(包括硬件、控制等各方面并不是专门做SLAM的工程师),加上汇报的内容较多,因此在分享中我尽量使用简介的口语,而不出现复杂的公式。所以本文面向的是3D-slam方向的初学者。内容在整理中参考了许多链接,将放在最后。在文章结束后,我会把原PPT放在上面,需要者自取。另外打个广告,在slam方向有实习意愿的,请发送简历至zkyy8

    2022年8月23日
    10
  • endnote x9中文版安装教程(vivox9安装未知应用权限在哪)

    endnote x9中文版安装教程(vivox9安装未知应用权限在哪)一、下载在百度中搜索“Endnotex9”,点第一个链接进入下载页面。软件大小为108MB,下载的是一个压缩包,如下图所示,双击解压之后是右侧的图标,解压到文件夹,双击即可安装。二、安装直接安装即可,可以更换安装路径备注:安装成功后使用汉化版,可以将CHS文件夹里的[EndNote.exe]拷贝到EndNote的安装目录下。使用英文版,可以将ENG文件夹里的[EndNote.exe]拷贝到EndNote的安装目录下。不论用的是英文版还是中文版,替换之后即可使用…

    2022年4月18日
    195
  • 鲲鹏920服务器_华为鲲鹏服务器

    鲲鹏920服务器_华为鲲鹏服务器安装任意Mysql版本都适用配置本地yum源备份原yum库文件并将新配置写入repo文件。#mv/etc/yum.repos.d//etc/yum.repos.d-bak#mkdir/etc/yum.repos.d#echo-e”[kunpeng]\nname=CentOS-kunpeng-Base-mirrors.huaweicloud.com\nbaseurl=https:…

    2022年10月16日
    3
  • win7显示器亮度怎么调_虚拟机外接显示器

    win7显示器亮度怎么调_虚拟机外接显示器很久没有继续研究wddmhook了,最后一次研究还在3年前,不得不说虽然应用的少,但是wddmhook却是很有技术含量的一项技术,而且实用性很高,我们除了做虚拟显示器还能做很多的东西,比如高效的截屏(因为直接从驱动层面截屏,所以效率和实现效果秒杀mirrordriver和DXGI)、视频重定向(视频硬件加速的时候可以直接获取原始码流)、修改原始的显示器厂商信息、修改显示器支持分辨率,等等骚操作wddmhook都可以实现。去年,深圳某硬件公司找到我,他们正在做usb转HDMI或者USB转VGA的硬件

    2022年8月21日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号