Javascript redux如何使用react路由器在组件Willmount上重定向
如何使用react路由器在组件Willmount上重定向Javascript redux如何使用react路由器在组件Willmount上重定向,javascript,reactjs,redux,react-router,Javascript,Reactjs,Redux,React Router,如何使用react路由器在组件Willmount上重定向 export class NewStock extends React.Component { constructor(props, context) { super(props, context); } componentWillMount() { const { session, dispatch, router } = this.props if (session.userSessionData
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
尝试
此.props.history
:
const { history } = this.props
history.pushState(null, '/login') or
history.replaceState(null, '/login')
如果您的模块不是路由器的直接后代,您仍然可以通过将组件包装在
withRouter(YourComponent)
HOC(在v4中)中来访问此道具。我所做的是使用路由的oneter
道具。这使我能够更好地集中身份验证。我的灵感来自
我来这里是因为我和你一样在摸索,但很快就陷入了一大堆无法管理的代码中
希望所有来到这里的人都能从我的错误中吸取教训
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'));
功能要求授权(下一状态,替换){
如果(!UserStore.userIsSignedIn()){
替换({
路径名:'/login',
状态:{nextPathname:nextState.location.pathname}
})
}
}
渲染((
),document.getElementById('content');
我只看到从Router.Navigation mixin使用transitiono()的示例。您需要添加该mixin,然后您就可以说this.transition(…)
还有一件事,可能最好是在WillTransition静态回调上进行编程转换。这将在调用transitiono()之前的一段时间内阻止视图可见。对于我来说,我得无法读取未定义的属性“pushState”
。似乎我对我的组件没有上下文。(使用相同的定义和构造函数)我必须道歉,我没有意识到这是redux。我在做自动取款机。所以我无论如何也不可能为我工作。抱歉,我弄糊涂了,实际上这不是特定于redux的-历史记录会传递给路由器,应该在上下文中提供,例如-{routes}
我喜欢使用更高阶的组件来包装所有需要验证的页面。您的方法存在的问题是,在没有经过身份验证的情况下,可能会看到身份验证页面。只需注销而不重定向。我喜欢更好的组件DidMount+组件将获得道具。如果身份验证在页面上更改,我仍将被重定向,并且我不需要在每次注销按钮中都放置重定向登录。v4更新:onEnter
属性被删除,文档建议使用componentWillMount
: