我试图在react-router v4中解决重定向问题。如果用户已登录,我想重定向到Dashboard组件;如果我到了路径=" /"
,我想要在用户注销时注册组件 <Switch>
<Route exact path="/" component={Login} />
<PrivateRoute path="/dashboard" component={Dashboard}></PrivateRoute>
<Redirect from='*' to='/404' />
</Switch>
提前致谢。
答案 0 :(得分:1)
如果我理解正确的话是:
对于1,如果用户已通过身份验证,请检查componentDidMount
login
,如果是,则重定向到信息中心。
对于componentDidMount
中的2和3,这次如果用户未经过身份验证,则会重定向到登录。
对于4,在logout
重定向到用户login
页面内。
我不知道您如何存储身份验证数据,因此我无法提供准确的示例代码。
答案 1 :(得分:1)
authenticate() {
//do something to check if logged in
if (loggedIn) {
this.setState({ isAuth: true })
}
}
<Router>
<Switch>
<Route path="/" render={props => (
<Login
auth={this.authenticate}
/>
)}/>
{this.state.isAuth ?
<Route path="/dashboard" component={Dashboard}/>
/>
) : <Redirect to='/' />}
</Switch>
</Router>
然后在您的登录组件中执行以下操作:
<Link to="/dashboard"><button onClick={() => this.props.auth()}>Sign In</button></Link>
答案 2 :(得分:1)
您可以检查用户是否已登录PrivateRoute
并根据此值重定向到“/ login”页面或从props返回Component
PrivateRoute组件的示例:
const mapStateToProps = createStructuredSelector({
isLoggedIn: makeSelectIsLoggedIn(),
});
@connect(mapStateToProps)
export default class PrivateRoute extends React.Component {
render() {
const {isLoggedIn} = this.props;
return isLoggedIn
? <AppLayout {...this.props}/>
: <Redirect to={routePaths.LOGIN}/>;
}
}
PublicRoute组件:
const mapStateToProps = createStructuredSelector({
isLoggedIn: makeSelectIsLoggedIn(),
});
@connect(mapStateToProps)
export default class PublicRoute extends React.Component {
render() {
const {isLoggedIn} = this.props;
return isLoggedIn
? <Redirect to={routePaths.DASHBOARD}/>
: <AppLayout {...this.props}/>;
}
}
路线:
<Switch>
<Route exact path={routePaths.ROOT} component={Login} />
<PublicRoute path={routePaths.LOGIN} component={Login}/>
<PrivateRoute path={routePaths.DASHBOARD} component={Dashboard}/>
<Route component={NotFound}/>
</Switch>