Javascript 客户端的React路由器只工作一次

Javascript 客户端的React路由器只工作一次,javascript,reactjs,flux,react-router,isomorphic-javascript,Javascript,Reactjs,Flux,React Router,Isomorphic Javascript,我正在使用react路由器进行服务器端和客户端路由,试图制作一个同构的应用程序。服务器路由工作正常,我可以检索数据,但是,在客户端,我单击的第一个链接调用响应路由器对url更改的回调。由于某些原因,后续单击不会触发回调 //server.js ReactRouter.run(mainApp.getComponent(), req.path, function (Root, state) { //if no matching routes found, then go to 404 if (sta

我正在使用react路由器进行服务器端和客户端路由,试图制作一个同构的应用程序。服务器路由工作正常,我可以检索数据,但是,在客户端,我单击的第一个链接调用响应路由器对url更改的回调。由于某些原因,后续单击不会触发回调

//server.js
ReactRouter.run(mainApp.getComponent(), req.path, function (Root, state) {
//if no matching routes found, then go to 404
if (state.routes.length === 0) {
  res.status(404);
}

var RootComponent = fluxibleAddons.provideContext(Root, {
  getStore : React.PropTypes.func.isRequired,
  executeAction : React.PropTypes.func.isRequired
});

var loadAction = state.routes[1].handler.loadAction;
var renderReactOnServer = function () {
    var markup = React.renderToString(React.createElement(RootComponent, React.__spread({}, state, { context : context.getComponentContext()  }) ));
    res.expose(mainApp.dehydrate(context), mainApp.uid);

    console.log("Rendering Server React Components");
  res.render("index", {
    main: markup,
    uid: mainApp.uid
  }, function (err, markup){
    if (err) {
      next(err);
    }
    res.send(markup);
  });
};

if (loadAction){
  context.getActionContext().executeAction(loadAction, { params: state.params, query: state.query }, renderReactOnServer);
} else {
  renderReactOnServer();
}
我正在服务器上运行react路由器的主运行方法

在客户端上,我运行以下命令

Router.run(app.getComponent(), Router.HistoryLocation, function (Root, state) {
        var RootComponent = fluxibleAddons.provideContext(Root,{
            getStore : React.PropTypes.func.isRequired,
            executeAction: React.PropTypes.func.isRequired
        });
        React.render(React.createElement(RootComponent, React.__spread({}, state, { context : context.getComponentContext()  })), document.getElementById(app.uid));
 });

在我的client.js中,react router run的回调只被调用一次,这对我来说很奇怪。没有可见的错误。有人有什么想法吗?

你能举一个你正在呼叫的链接的例子吗?我发现,你不能在react router提供的根组件上创建新组件,否则每次停止路由器时都会卸载根组件。但是我仍然需要将上下文传递给孩子们,所以我所做的是将上下文传递给Root之后的下一个最高的组件,这是我的应用程序组件,然后应用程序组件将上下文传递给所有的孩子们,这是路由句柄扫描你显示了你正在调用的链接的示例吗?我找到了,您不能在react router提供的根组件之上创建新组件,否则每次停止路由器时都会卸载根组件。但是,我仍然需要将上下文传递给子级,所以我所做的是将上下文传递给根之后的下一个最高组件,即我的应用程序组件,然后应用程序组件将上下文传递给所有子级,即路由处理程序