reactjs – browserHistory.push不会导航到新页面

我已经在路由器上设置了这个(react-router 2.0)的browserHistory:
import { browserHistory } from 'react-router'

function requireAuth(nextState,replace) {
    if (!services.auth.loggedIn()) {
        replace({
            pathname: '/login',state: { nextPathname: nextState.location.pathname }
        })
    }
}

export default (store) => (
  <Router history={browserHistory}>
    <Route path='/' component={AppLayout}>
      <Route path="login" component={LoginContainer} />
      <Route path="map" component={MapContainer} onEnter={requireAuth} />
    </Route>
  </Router>
);

然后我试图在反应路由器中使用browserHistory以编程方式从视图ala中路由到新页面

import { browserHistory } from 'react-router'

 ...

 browserHistory.push('/map');

这将URL更改为/ map,但不会在该路由中呈现组件.我究竟做错了什么?

正如我在评论中提到的那样,我遇到了同样的问题,但是我已经找到了一种方法.

这里发生的是你的路线正在改变,但你的AppLayout组件实际上并不是自动更新它的状态.路由器似乎不会自动强制组件上的状态更改.基本上,您的AppLayout上的this.state.children没有被新的孩子更新.

我发现的解决方案(和充分的披露,我不知道这是如何应该实现这一点,或者如果它是最佳实践)是使用componentWillReceiveProps函数和更新this.state.children与孩子从新的道具:

componentWillReceiveProps(nextProps) {
    this.setState({
        children: nextProps.children
    });
}

希望这可以帮助!

相关文章

导入moment 使用方式 年月日,时分秒 星期几 相对时间 7天后 2小时后 明天 将毫秒转换成年月日
@ 一、前言 为什么介绍redux-actions呢? 第一次见到主要是接手公司原有的项目,发现有之前的大佬在处理...
十大React Hook库 原文地址:https://dev.to/bornfightcompany/top-10-react-hook-libraries-4065 原文...
React生命周期 React的生命周期从广义上分为挂载、渲染、卸载三个阶段,在React的整个生命周期中提供很...
React虚拟DOM的理解 Virtual DOM是一棵以JavaScript对象作为基础的树,每一个节点可以将其称为VNode,用...
React中JSX的理解 JSX是快速生成react元素的一种语法,实际是React.createElement(component, props, ....