withRouter的作用

參考地址:https://www.cnblogs.com/luowenshuai/p/9526341.html

作用:把不是通過路由切換過來的組件中剃袍,將react-router 的 history辛润、location、match 三個對象傳入props對象上

默認情況下必須是經(jīng)過路由匹配渲染的組件才存在this.props,才擁有路由參數(shù),才能使用編程式導(dǎo)航的寫法蟹但,執(zhí)行this.props.history.push('/detail')跳轉(zhuǎn)到對應(yīng)路由的頁面

然而不是所有組件都直接與路由相連(通過路由跳轉(zhuǎn)到此組件)的,當這些組件需要路由參數(shù)時谭羔,使用withRouter就可以給此組件傳入路由參數(shù)华糖,此時就可以使用this.props

一:如何使用withRouter:

比如app.js這個組件,一般是首頁瘟裸,不是通過路由跳轉(zhuǎn)過來的客叉,而是直接從瀏覽器中輸入地址打開的,如果不使用withRouter此組件的this.props為空景描,沒法執(zhí)行props中的history十办、location、match等方法超棺。

我就通過在App.js組件中使用withRouter來簡單介紹一下:

設(shè)置withRouter很簡單只需要兩步:(1)引入 (2)將App組件 withRouter() 一下

[
復(fù)制代碼

](javascript:void(0); "復(fù)制代碼")

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">import React,{Component} from 'react' import {Switch,Route,NavLink,Redirect,withRouter} from 'react-router-dom' //引入withRouter
import One from './One' import NotFound from './NotFound' class App extends Component{ //此時才能獲取this.props,包含(history, match, location)三個對象
console.log(this.props); //輸出{match: {…}, location: {…}, history: {…}, 等}
render(){return (<div className='app'>
<NavLink to='/one/users'>用戶列表</NavLink>
<NavLink to='/one/companies'>公司列表</NavLink>
<Switch>
<Route path='/one/:type?' component={One} />
<Redirect from='/' to='/one' exact />
<Route component={NotFound} />
</Switch>
</div>)
}
}
export default withRouter(App); //這里要執(zhí)行一下WithRouter</pre>

[
復(fù)制代碼

](javascript:void(0); "復(fù)制代碼")

二:介紹一個簡單應(yīng)用

可以根據(jù)路由切換瀏覽器的title屬性向族,對props.history進行監(jiān)聽,切換路由的時候獲取當前的路由路徑棠绘,同時可以根據(jù)不同的路由設(shè)置不同的瀏覽器title標題件相。

仍然是App.js組件:

[
復(fù)制代碼

](javascript:void(0); "復(fù)制代碼")

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">import React,{Component} from 'react' import {Switch,Route,NavLink,Redirect,withRouter} from 'react-router-dom' import One from './One' import NotFound from './NotFound' class App extends Component{
constructor(props){
super(props);
props.history.listen((location)=>{ //在這里監(jiān)聽location對象
console.log(location.pathname); //切換路由的時候輸出"/one/users"和"/one/companies"
switch(location.pathname){ //根據(jù)路徑不同切換不同的瀏覽器title
case '/one/users' : document.title = '用戶列表'; break; case '/one/companies' : document.title = '公司列表'; break; default : break;
}
})
}
render(){ return (<div className='app'>
<NavLink to='/one/users'>用戶列表</NavLink>
<NavLink to='/one/companies'>公司列表</NavLink>
<Switch>
<Route path='/one/:type?' component={One} />
<Redirect from='/' to='/one' exact />
<Route component={NotFound} />
</Switch>
</div>)
}
}
export default withRouter(App);</pre>

[
復(fù)制代碼

](javascript:void(0); "復(fù)制代碼")

頁面效果:

image

當點擊“用戶列表”,瀏覽器標題會顯示:
image

當點擊“公司列表”氧苍,瀏覽器標題會顯示:
image

三:當然還有眾多用途夜矗,如果你使用了編程式導(dǎo)航的寫法:

this.props.history.push('/detail') 去跳轉(zhuǎn)頁面,但是報 this.props.history 錯誤 undefined让虐,請在此組件中使用 withRouter 將 history 傳入到 props上紊撕。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市赡突,隨后出現(xiàn)的幾起案子对扶,更是在濱河造成了極大的恐慌,老刑警劉巖惭缰,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浪南,死亡現(xiàn)場離奇詭異,居然都是意外死亡漱受,警方通過查閱死者的電腦和手機络凿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人絮记,你說我怎么就攤上這事摔踱。” “怎么了到千?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵昌渤,是天一觀的道長赴穗。 經(jīng)常有香客問我憔四,道長,這世上最難降的妖魔是什么般眉? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任了赵,我火速辦了婚禮,結(jié)果婚禮上甸赃,老公的妹妹穿的比我還像新娘柿汛。我一直安慰自己,他們只是感情好埠对,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布络断。 她就那樣靜靜地躺著,像睡著了一般项玛。 火紅的嫁衣襯著肌膚如雪貌笨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天襟沮,我揣著相機與錄音锥惋,去河邊找鬼。 笑死开伏,一個胖子當著我的面吹牛膀跌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播固灵,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼捅伤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了巫玻?” 一聲冷哼從身側(cè)響起丛忆,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎大审,沒想到半個月后蘸际,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡徒扶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年粮彤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡导坟,死狀恐怖屿良,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情惫周,我是刑警寧澤尘惧,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站递递,受9級特大地震影響喷橙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜登舞,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一贰逾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧菠秒,春花似錦疙剑、人聲如沸藐窄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽导而。三九已至禁灼,卻和暖如春管挟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背匾二。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工哮独, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人察藐。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓皮璧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親分飞。 傳聞我的和親對象是個殘疾皇子悴务,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容