2017-08-24 44 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. 确保您在某处存储此过渡的状态。原因是,如果状态没有改变,那么持有不同视图的组件就没有理由触发重新渲染,将您希望看到的视图放入视图中或放入视图中。