RouterContext.push()重新加载导航页面

时间:2016-01-04 00:56:34

标签: reactjs react-router

这是我的路由器配置:

<Router history={hashHistory}>
        <Route path="/" component={App}>
            <Route path="email" component={EmailPage}>
                <Route path="accountinfo" component={AccountInfo}/>
            </Route>
        </Route>
</Router>

EmailPage我有这个方法:

class EmailPage {
  onEmailSubmit() {
    this.context.router.push('/email/accountinfo');
  }
}

我第一次提交,它会重新加载整个页面,消除'emailPage'组件的状态。

使用React router 2.0.0-rc4。我做错了吗?

更新:
我看到网址发生了变化:

http://localhost:8080/#/email/?_k=1w69uj

to 
http://localhost:8080/?#/email/accountinfo?_k=ezdjg6

instead of 
http://localhost:8080/#/email/accountinfo?_k=ezdjg6

请注意?之前遗漏的额外#似乎导致重新加载

1 个答案:

答案 0 :(得分:2)

我有一次类似的问题.. 以此为例..

  getRef(ref) {
    this.placeRef = ref;
  }

  handleSubmit(e) {
    e.preventDefault();
    console.log(e);
    var place = this.placeRef.value;
    this.placeRef.value = '';
    this.context.router.push('/place/'+place);
  }

  render() {
    return (
      <div id="search">
        <form onSubmit={(e) => this.handleSubmit(e)}>
          <div id="input_place">
            <input type="text" className="design" ref={(ref) => this.getRef(ref)} />
          </div>
          <div id="place_search">
            <button type='submit' className="design">Search</button>
          </div>
        </form>
      </div>
    );
  }

handleSubmit()函数中,如果删除e.preventDefault(),则会发生整页重新加载。 所以我想这可能是你问题的解决方案。