React路由攔截模式及withRouter示例詳解
一、路由攔截
在前面兩篇 路由博客基礎上,我們將ReactRouter.js的我的profile路由設置成路由攔截的:
<Route path="/profile" render={() =>
isAuth() ? <Profile/> : <Redirect to="/login"></Redirect>
}></Route>

新建Login.js組件,寫入代碼:
import React, { Component } from 'react'
export default class Login extends Component {
render() {
return (
<div>
<h2>Login</h2>
<input type="text"></input>
<button onClick={() => {
localStorage.setItem('token', 123 )
this.props.history.push('/profile')
}}>模擬登錄</button>
</div>
)
}
}
效果:


二、路由模式
之前帶#號的路由模式為哈西模式,如果想不帶#號的話,可以寫成如下:

但是BrowserRouter沒有#路徑,后端如果沒有對應的路徑處理邏輯,就會404。
三、withRouter
如果我們在我的頁面里面還有我的訂單路由的話,那么在Profile.js中寫入跳轉的語法:
import React from 'react'
export default function Profile(props) {
return (
<div>
<h1>Profile</h1>
<div onClick={() => {
props.history.push('/profileorder')
}}>我的訂單</div>
</div>
)
}

可以看到報錯了,那我們之前那種寫法不生效了嗎。其實跟路由的創(chuàng)建有關系,之前是直接將組件用component屬性直接傳了過去,所以props有history對象,但是這次我們是采用的render將組件在立即函數(shù)中實例化了,不傳進去:

所以在這里props接收不到任何東西,是非常正常的。在使用render的路由時,我們可以這樣傳參:

通過傳props那么子組件中將有路由的一些屬性,就可以做跳轉。如果在路由組件上不傳props的話,那么將使用withRouter進行跳轉。將props刪除:



可以看到即使render的路由父組件不傳props,我們使用withRouter,也能夠進行路由的跳轉。
以上就是React路由攔截模式及withRouter示例詳解的詳細內容,更多關于React路由攔截模式withRouter的資料請關注腳本之家其它相關文章!
相關文章
解決React報錯Functions are not valid as 
這篇文章主要為大家介紹了React報錯Functions are not valid as a React child解決詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12
基于React.js實現(xiàn)兔兔牌九宮格翻牌抽獎組件
這篇文章主要為大家詳細介紹了如何基于React.js實現(xiàn)兔兔牌九宮格翻牌抽獎組件,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2023-01-01
React+Node實現(xiàn)大文件分片上傳、斷點續(xù)傳秒傳思路
本文主要介紹了React+Node實現(xiàn)大文件分片上傳、斷點續(xù)傳秒傳思路,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02
簡易的redux?createStore手寫實現(xiàn)示例
這篇文章主要介紹了簡易的redux?createStore手寫實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10

