React Router - onEnter挂钩中的中止转换

时间:2016-12-01 15:15:00

标签: reactjs react-router browserify

我正在使用最新版本的反应路由器(^ 3.0.0)。

我正在尝试使用onEnter挂钩中止其中一个组件的转换:

var AuthorPage = React.createClass({
  statics: {
    onEnter: function(nextState, replace, callback) {
        replace('/');;
        //hashHistory.replace('/');
    }},...

当我使用onEnter挂钩的替换方法时,它工作正常(组件确实更改回我的主应用程序组件)但URL保持不变: http://localhost:9005/#/authors代替http://localhost:9005/#

另一方面,当我使用hashHistory.replace方法时,组件和URL都会正确更改(使用react-router的hashHistory)。

我想澄清两件事:

  1. 为什么我会想要使用替换方法,如果它没有更改我的URL,而它确实将组件更改回我想要的?
  2. hashHistory.replace方法是否被认为是执行中止过渡到特定页面的适当方式?
  3. 谢谢

1 个答案:

答案 0 :(得分:0)

您应该使用replace。使用hashHistory不会正确中断转换。

您需要进行更多挖掘,以确定它为何不更新网址。它应该是。如果你能找到这个功能:

https://github.com/mjackson/history/blob/v2.x/modules/createHashHistory.js#L93-L123

node_modules/history/createHashHistory.js(它将在ES5中),您可以尝试记录您在那里收到的位置。

如果没有调用,您可以尝试检查redirectLocationmatch回调的historyListener值。

https://github.com/ReactTraining/react-router/blob/6eeb7ad358f987520f5b519e48bdd31f725cbade/modules/createTransitionManager.js#L212-L233