鍍金池/ 問答/HTML5  HTML/ withRouter有什么用,為什么沒有withRouter的組件也一樣使用

withRouter有什么用,為什么沒有withRouter的組件也一樣使用

背景:

有人說:

“withRouter可以包裝任何自定義組件,將react-router 的 history,location,match 三個對象傳入。
無需一級級傳遞react-router 的屬性,當(dāng)需要用的router
屬性的時候,將組件包一層withRouter,就可以拿到需要的路由信息”

還有人說:

如果使用了react-router-redux,則可以直接從state
中的router屬性中獲取location。不需要再使用withRouter 獲取路由信息了

withRouter 就為了獲取this.props.location嗎,還有沒有哪些沒注意的地方但是withRouter起了很大作用的例子?

回答
編輯回答
背叛者

個人理解
比如:

 <Route exact path="/Home" component={Home}/>
 
 1.只有包裹在Route組件里的才能使用`this.props.location`,
 2.假如有個需求,是面包屑或者導(dǎo)航組件里需要拿到`this.props.location`(導(dǎo)航組件或者面包屑一般不會包裹在`Route`里吧),那么直接這么寫顯然就不行了。
 這個時候`withRouter`修飾一下,就可以這么寫了。
2017年6月27日 08:38
編輯回答
掛念你

舉個栗子說:當(dāng)你需要使用使用url做判斷,或者需要在組件內(nèi)部需要url信息來使用,這個時候withRouter這個hoc可以的組件立馬擁有路由信息例如: query, params, location, url,search等等

2017年6月6日 21:58
編輯回答
憶往昔

對,就是為了獲取location這些參數(shù)而已,本質(zhì)上是個高階組件,提供一個context。

不是所有需要路由參數(shù)的組件都直接與路由相連,withRouter就是解決這個問題的。

2018年2月16日 22:28
編輯回答
情未了

目的就是讓被修飾的組件可以從屬性中獲取history,location,match,
路由組件可以直接獲取這些屬性,而非路由組件就必須通過withRouter修飾后才能獲取這些屬性了,
比如

<Route path='/' component={App}/>

App組件就可以直接獲取路由中這些屬性了,但是,如果App組件中如果有一個子組件Foo,那么Foo就不能直接獲取路由中的屬性了,必須通過withRouter修飾后才能獲取到。

2017年12月17日 01:58