<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何設(shè)計路由權(quán)限?

          共 2452字,需瀏覽 5分鐘

           ·

          2021-01-08 08:28

          (????)??嗨,我是你穩(wěn)定更新、持續(xù)輸出的勾勾。



          新年快樂,我又來更新了~


          今天的主題是路由權(quán)限。


          對于 react 中的路由權(quán)限管理,react-router 并沒有給我們提供任何 API 操作,需要我們單獨封裝一個組件。


          對于路由的權(quán)限管理,我們要考慮的點很多,需要判斷路由是否是根路由,是否是登錄頁,是否是需要登錄權(quán)限的頁面,是否是非法路由,然后根據(jù)不同的路徑返回不同的組件或使用組件重定向路由。


          先看我們項目下有哪些路由配置。


          在 routes.js 中:

          //統(tǒng)一管理路由import Home from "../Home/Home"import Login from "../Login/Login"import Pages from "../Pages/Pages";import News from "../News/News";import Users from "../Users/Users";import NotFound from "../404/404";
          export default [ {path:"/",component:Home,exact:true }, {path:"/login",component:Login,exact:true }, {path:"/404",component:NotFound,exact:true }, {path:"/pages",component:Pages,routes:[ {path:"/pages/news",component:News }, {path:"/pages/users",component:Users } ] }]


          通過上面的路由配置,我們看出,該項目下有四個路由分別是主頁 home,登錄 login,404 頁,再加一個 pages 頁。


          對這四個路由我們分析如下:

          • 404 和 login 是任何人都能看到的頁面,home 和 pages 需要有登錄狀態(tài)

          • 不在這個配置內(nèi)的路由都是非法路由


          那么通過這兩點分析,我們實現(xiàn)一下路由權(quán)限管理的邏輯。


          在項目下我們創(chuàng)建一個 Authcomponent.js 文件。

          import React from "react"import { BrowserRouter as Router,Route,Redirect, Switch } from "react-router-dom"import routes from "../routes/routes"import Login from "../Login/Login"
          function Authcomponent(props){// console.log(props)const pathname = props.location.pathname; //獲取pathnameconst targetRouter = routes.find((item,index)=>{return pathname.search(item.path) !== -1 //查找在routes.js下是否存在 })const isLogin = JSON.parse(window.localStorage.getItem("loginStatus"))if(pathname == "/"){ //首頁return <Redirect to="/login" component={Login}>Redirect> }if(!targetRouter){ //非法路由return <Redirect to = "/404">Redirect> }if(isLogin){ //有登錄狀態(tài)了if(pathname === "/login"){return <Redirect to="/home">Redirect> }else{return ( ) } }else{ //沒有登錄狀態(tài) if(targetRouter.auth){ //該頁面是否要權(quán)限 return }else{ console.log(targetRouter.routes) return (
          ) } }}
          export default Authcomponent;


          這樣我們就把整個路由的權(quán)限統(tǒng)一管理起來,每一次的路由的跳轉(zhuǎn)都要去做一次權(quán)限判斷。所以我們把這個權(quán)限組件寫在 App.js 中。

          import Authcomponent from "./Authcomponent.js";function App(props) {console.log(window)return (<Router><Switch><Authcomponent>Authcomponent>Switch>Router>  );}
          export default App;


          這樣就保證了每次我們在頁面進行路由跳轉(zhuǎn)的時候,就會去這個 Authcomponent.js 中進行路由權(quán)限判定,從而實現(xiàn)對這個頁面的保護。


          推薦閱讀:

          技術(shù)人年度總結(jié) | 2020,注定不平凡

          2020 最后一篇技術(shù)文:可愛的烏咪 UmiJS

          探索加密解密的世界

          是我 Web 端配不上阿里了。

          給 React 穿上美麗的‘嫁衣’

          不可避免的問題:React 的路由如何抽離?

          API 終結(jié)者 —— 殺手 Reflect

          前端人因為 Vue3 的 Ref-sugar 提案打起來了!


          點點“”和“在看”,保護頭發(fā),減少bug。

          瀏覽 59
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品自在在线看 | 九九九精品影视 | 91麻豆精品秘密秘 入口-百度 | 日本激情视频一区二区三区 | 成人一级黄色A片 |