redux如何使用react-router重定向componentWillMount

时间:2015-12-15 08:57:16

标签: javascript reactjs redux react-router

如何使用react-router

重定向componentWillMount
export class NewStock extends React.Component {
  constructor(props, context) {
    super(props, context);
  }

  componentWillMount() {
    const { session, dispatch, router } = this.props
    if (session.userSessionData.get('logged_in') == false) {
      router.transitionTo('/login')
    }
  };

此代码:

router.transitionTo('/login')

只返回:

Uncaught TypeError: router.transitionTo is not a function

2 个答案:

答案 0 :(得分:11)

尝试this.props.history

const { history } = this.props
history.pushState(null, '/login') or
history.replaceState(null, '/login')

如果您的模块不是路由器的直接后代,您仍然可以通过将组件包装在withRouter(YourComponent) HOC(第4版)中来访问此道具。

答案 1 :(得分:2)

我正在做的是使用路线的onEnter道具。这使我可以更好地集中我的身份验证。我的灵感来自the react-router examples

我来到这里是因为我和你一样笨手笨脚,但很快陷入了无法控制的巨大代码。

希望所有人来到这里,你会从我的错误中吸取教训。

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

render((
    <Router history={hashHistory}>
        <Route path="/" component={PageHeader}>
            <IndexRoute component={AssignmentOverview} onEnter={requireAuth}/>
            <Route path="login" component={UserLoginForm}/>
            <Route path="logout" component={UserLogout}/>
            <Route path="profile" component={UserProfile} onEnter={requireAuth}/>
            <Route path="assignmentform" component={AssignmentForm} onEnter={requireAuth}/>
        </Route>
    </Router>
), document.getElementById('content'));