【问题标题】:How to use back button with React Router如何在 React Router 中使用后退按钮
【发布时间】:2015-11-13 18:01:49
【问题描述】:

我在使用 ReactRouter 时遇到问题。

下面是我如何初始化和运行路由器:

var routes = (
  <Route handler={App}>
    <DefaultRoute handler={Domains}/>
    <Route path="login" name="login" handler={Login}/>
    <Route path="signup" name="signup" handler={SignUp}/>
  </Route>);

var config = {routes, location: Router.HistoryLocation};
const router = Router.create(config);
export default router;

$(document).ready(() => {
  router.run( (Root) => {
    React.render(<Root/>, document.getElementById('maincontent'));
  });
});

阅读文档,这样我希望我在按下浏览器的后退按钮时,或者使用 goBack() 方法浏览器转到上一页。

相反,当我使用 goBack() 方法时,首先从 url 中删除一个哈希(方法 transitionTo 添加),然后再次调用它,它才能工作。按钮也是如此。

【问题讨论】:

    标签: reactjs browser-history react-router


    【解决方案1】:

    根据文档,如果您想使用 HistoryLocation,您必须配置您的服务器来处理它。..

    React Router Documentation - HistoryLocation

    (一个 nodejs 示例):

    app.get('*', function (req, res) {
      res.render('index');
    });
    

    否则,您将需要使用 HashLocation,因为这会将其保持在同一页面上。

    如果设置正确,您可以通过接收router.run -- state 中的第二个道具来调试路由器中发生的事情。

    Here's the properties state contains.

    Router.run(routes, function(Handler, state) {
        console.log(state);
        React.render(<Handler>);
    });
    

    【讨论】:

    • 谢谢,但我的服务器配置正确。您知道如何调试路由器的历史记录吗?我将问题缩小到只有特殊情况,但我需要查看 url 是如何存储的
    • router.run 中传回了第二个名为routeState 的道具——它几乎是路由结果的上下文。您可以将其记录到控制台以检查实际返回的内容。
    猜你喜欢
    • 2017-06-11
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 2018-04-16
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多