2017-08-24 85 views
0

當我以編程方式嘗試更改視圖時,它只會更改url,而不會查看。React路由器v4不會切換視圖

我有什麼:

import createHistory from 'history/createBrowserHistory'; 
const history = createHistory(); 

我綁定點擊收聽到一些ELEM:

<div onClick={this.navigateMeToHome}>To Home</div> 

而且當我聽到這樣的:

navigateMeToHome =() => { 
    history.push('/') 
} 

地址已更改爲家庭地址,但路由視圖仍然相同。

什麼是錯,我該如何解決這個問題?

UPD: 這部分outsiteSwitсh:

<div> 
    <BrowserRouter> 
    <div> 
    <Header/> <=== This guy. 
    <div className="container"> 
    <div className="app"> 
    <Switch> 
     <Route exact path="/" render={props => <Home {...props}/>}/> 
     <Route path="/search" component={Search}/> 
    </Switch> 
    </div> 
    </div> 
    </div> 
</BrowserRouter> 
</div> 
+0

首先,您不需要在react-router v4中使用此命令:'history/createBrowserHistory'中的import createHistory; const history = createHistory();'。其次,你可以分享'navigateMeToHome'所在的類/函數嗎? – Win

+0

是的,我知道,我可以瀏覽this.props.history.push('/別處')。 問題是我的Menu類不是Route組件。 – WebArtisan

+1

你可以分享代碼嗎?如果你的類不是一個Route組件,你可以使用'withRouter()'來爲它提供一個與Route組件相同的道具。 – Win

回答

0

三件事我會去了解一下先。

  1. 您只需只是使用ReactTraining /歷史?如果是這樣,那只是控制瀏覽器的歷史。它對進出組件的路由沒有影響。

  2. 如果您正在使用react-router,react-router-dom等,請確保您的路由嵌套在由ReactTraining的路由器庫提供的​​組件內部。還有其他方法可以切換視圖,但Switch是最簡單的實現之一。

  3. 確保您在某處存儲此過渡的狀態。原因是,如果狀態沒有改變,那麼持有不同視圖的組件就沒有理由觸發重新渲染,將您希望看到的視圖放入視圖中或放入視圖中。