国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

利用react-router4的react-router-config做路由鑒權(quán)

Amos / 3226人閱讀

摘要:一是一個幫助我們配置靜態(tài)路由的小助手。以上修改了部分源碼并完成了我們想要的效果。

一、react-router-config 是一個幫助我們配置靜態(tài)路由的小助手。
其源碼就是一個高階函數(shù) 利用一個map函數(shù)生成靜態(tài)路由

import React from "react";
import Switch from "react-router/Switch";
import Route from "react-router/Route";
const renderRoutes = (routes, extraProps = {}, switchProps = {}) =>
routes ? (
    
        {routes.map((route, i) => ( 
         (
            
          )}
        />
      ))}
    
  ) : null;
 export default renderRoutes;

//router.js 假設(shè)這是我們設(shè)置的路由數(shù)組(這種寫法和vue很相似是不是?)

const routes = [
    { path: "/",
        exact: true,
        component: Home,
    },
    {
        path: "/login",
        component: Login,
    },
    {
        path: "/user",
        component: User,
    },
    {
        path: "*",
        component: NotFound
    }
]

//app.js 那么我們在app.js里這么使用就能幫我生成靜態(tài)的路由了

import { renderRoutes } from "react-router-config"
import routes from "./router.js"
const App = () => (
   
{renderRoutes(routes)}
) export default App

扯了半天,要如何利用這個插件幫我們路由鑒權(quán)呢?
用過vue的小朋友都知道,vue的router.js 里面添加 meta: { requiresAuth: true }
然后利用導(dǎo)航守衛(wèi)

router.beforeEach((to, from, next) => {
  // 在每次路由進(jìn)入之前判斷requiresAuth的值,如果是true的話呢就先判斷是否已登陸
})

二、基于類似vue的路由鑒權(quán)想法,我們稍稍改造一下react-router-config
// utils/renderRoutes.js

import React from "react"
import { Route, Redirect, Switch } from "react-router-dom"
const renderRoutes = (routes, authed, authPath = "/login", extraProps = {}, switchProps = {}) => routes ? (
  
    {routes.map((route, i) => (
       {
          if (!route.requiresAuth || authed || route.path === authPath) {
            return 
          }
          return 
        }}
      />
    ))}
  
) : null

export default renderRoutes

修改后的源碼增加了兩個參數(shù) authed 、 authPath 和一個屬性 route.requiresAuth
然后再來看一下最關(guān)鍵的一段代碼

if (!route.requiresAuth || authed || route.path === authPath) {
    return 
    }
    return 

很簡單 如果 route.requiresAuth = false 或者 authed = true 或者 route.path === authPath(參數(shù)默認(rèn)值"/login")則渲染我們頁面,否則就渲染我們設(shè)置的authPath頁面,并記錄從哪個頁面跳轉(zhuǎn)。

相應(yīng)的router.js也要稍微修改一下

const routes = [
    { path: "/",
        exact: true,
        component: Home,
        requiresAuth: false,
    },
    {
        path: "/login",
        component: Login,
        requiresAuth: false,

    },
    {
        path: "/user",
        component: User,
        requiresAuth: true, //需要登陸后才能跳轉(zhuǎn)的頁面

    },
    {
        path: "*",
        component: NotFound,
        requiresAuth: false,
    }
]

//app.js

import React from "react"
import { Switch } from "react-router-dom"
//import { renderRoutes } from "react-router-config"
import renderRoutes from "./utils/renderRoutes"
import routes from "./router.js"

const authed = false // 如果登陸之后可以利用redux修改該值(關(guān)于redux不在我們這篇文章的討論范圍之內(nèi))
const authPath = "/login" // 默認(rèn)未登錄的時候返回的頁面,可以自行設(shè)置

const App = () => (
   
{renderRoutes(routes, authed, authPath)}
) export default App
//登陸之后返回原先要去的頁面login函數(shù)
login(){
    const { from } = this.props.location.state || { from: { pathname: "/" } }
     // authed = true // 這部分邏輯自己寫吧。。。
    this.props.history.push(from.pathname)
}

以上~修改了部分源碼并完成了我們想要的效果。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/95445.html

相關(guān)文章

  • react-router v5.x 源碼分析和理解 SPA router 原理

    摘要:一般情況下,都是作為等其他子路由的上層路由,使用了,接收一個屬性,傳遞給消費(fèi)子組件。創(chuàng)建對象,兼容老瀏覽器,其他和沒有大區(qū)別總結(jié)分為四個包,分別為,其中是瀏覽器相關(guān),是相關(guān),是核心也是共同部分,是一些配置相關(guān)。 這篇文章主要講的是分析 react-router 源碼,版本是 v5.x,以及 SPA 路由實(shí)現(xiàn)的原理。 文章首發(fā)地址 單頁面應(yīng)用都用到了路由 router,目前來看實(shí)現(xiàn)路由有...

    Harriet666 評論0 收藏0
  • React-router v4 路由配置方法

    摘要:使用了約等于才能匹配或者能匹配,所以說是約等于。使用了和才能匹配后續(xù)補(bǔ)充這是版本中新添加,主要用來做唯一匹配的功能。就是想要在眾多路由中只匹配其中一個路由。 React-Router v4 一. Switch 、Router 、Route三者的區(qū)別 1、Route Route 是建立location 和 ui的最直接聯(lián)系 2、Router react-router v4 中,Route...

    Coding01 評論0 收藏0
  • react-router 升級小記

    摘要:前言最近將公司項(xiàng)目的從版本升到了版本,跟完全不兼容,是一次徹底的重寫。升級過程中踩了不少的坑,也有一些值得分享的點(diǎn)。沒有就會匹配所有路由最后不得不說升級很困難,坑也很多。 前言 最近將公司項(xiàng)目的 react-router 從 v3 版本升到了 v4 版本,react-router v4 跟 v3 完全不兼容,是一次徹底的重寫。這也給升級造成了極大的困難,與其說升級不如說是對 route...

    isLishude 評論0 收藏0
  • 從無到有-在create-react-app基礎(chǔ)上接入react-router、redux-saga

    摘要:將所有的需要鑒權(quán)的頁面放在例如下,只有在有微信相關(guān)鑒權(quán)的信息存在,才允許訪問接下來的界面,否則,容器內(nèi)甚至可以直接不渲染接下來的界面。而接下來的則是把路由導(dǎo)向至了一個微信端專用的。 搭建項(xiàng)目框架 新建項(xiàng)目 執(zhí)行如下代碼,用create-react-app來建立項(xiàng)目的基礎(chǔ)框架,然后安裝需要用到的依賴。 $ npx create-react-app my-test-project $ cd...

    褰辯話 評論0 收藏0
  • 路由原理出發(fā),深入閱讀理解react-router 4.0源碼

    摘要:通過前端路由可以實(shí)現(xiàn)單頁應(yīng)用本文首先從前端路由的原理出發(fā),詳細(xì)介紹了前端路由原理的變遷。接著從的源碼出發(fā),深入理解是如何實(shí)現(xiàn)前端路由的。執(zhí)行上述的賦值后,頁面的發(fā)生改變。 ??react-router等前端路由的原理大致相同,可以實(shí)現(xiàn)無刷新的條件下切換顯示不同的頁面。路由的本質(zhì)就是頁面的URL發(fā)生改變時,頁面的顯示結(jié)果可以根據(jù)URL的變化而變化,但是頁面不會刷新。通過前端路由可以實(shí)現(xiàn)...

    Miyang 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<