2017-02-10 22 views
0

最近,我开始使用React构建一个单页面应用程序,然后我拿起反应路由器来完成导航部分,但是当需要传递页面之间的参数,我发现官方文档的解决方案是将参数作为查询字符串或参数添加到URL中,这不是我所期望的(我想在传统的POST方法中保留隐含的参数,与服务器通信)。好或坏,使用浏览器状态传递参数历史

一段时间谷歌搜索后,我找到了解决办法,请拨打

browserHistory.push({ 
    path : '/Paradise', 
    state : { location : 'Shangri-La'} 
}) 

通过在browserHistory的状态参数,并检索使用

this.props.location.state.location 

这工作正常的状态,这正是我所期望的。我只想知道这是否是一个很好的做法。对不起,我的英文破碎了。

+1

你的英语是绝对不破。但是,除非你真的给自己一个理由,为什么你认为这种方法有什么问题,或者它不适用于你,这几乎是一个有见地的问题。到目前为止,您正在质疑官方文档中的某些内容,并且工作正常。去自己解释:) – Gimby

+0

同意@Gimby。你在做什么是绝对好的。您正在使用位置状态的方式。如果这是一个好习惯,则取决于整个应用程序。如果你只需要在几页之间发送一个状态,那很好。但是,如果所有页面都需要这样做,我建议使用[tag:react-router-relay]查看[tag:react-redux]或[tag:relayjs]。这就是说,你的问题对于这个网站来说有点偏离主题,除了基本上是/否,这里没什么可说的。希望有所帮助。 – Chris

+0

谢谢@Gimby,快速回复。你的意思是说,这是一个官方的方法来操作状态作为参数容器,但是我没有找到来自react-router或W3C html5的官方文档,你有什么参考? – Songva

回答

0

好的做法是避免调用它location ..对我来说,我把它叫做previousRoute

另一个很好的做法,我把browserHistory.push包装在一个名为redirect的方法中,并放入超类。

class Base extends React.Component { 

    redirect(to, params = {}) { 

     params = Object.assign(params, { previousRoute : this.props.location.pathname}); 
     return browserHistory.push({ 
     path : to, 
     state : params 
     }); 

    } 
} 

然后:

class AnyOtherComponent extends Base { 

    //... you can call 
    this.redirect('Paradise', {param1: val1}); 

}