如何在 React Router 4 中实现经过身份验证的路由?所有答案都已过时
2022-08-30 02:30:09
我试图实现经过身份验证的路由,但发现 React Router 4 现在阻止了它的工作:
<Route exact path="/" component={Index} />
<Route path="/auth" component={UnauthenticatedWrapper}>
<Route path="/auth/login" component={LoginBotBot} />
</Route>
<Route path="/domains" component={AuthenticatedWrapper}>
<Route exact path="/domains" component={DomainsIndex} />
</Route>
错误是:
警告:您不应在同一路线上使用和; 将被忽略
<Route component>
<Route children>
<Route children>
在这种情况下,实现它的正确方法是什么?
它出现在(v4)文档中,它暗示了类似的东西react-router
<Router>
<div>
<AuthButton/>
<ul>
<li><Link to="/public">Public Page</Link></li>
<li><Link to="/protected">Protected Page</Link></li>
</ul>
<Route path="/public" component={Public}/>
<Route path="/login" component={Login}/>
<PrivateRoute path="/protected" component={Protected}/>
</div>
</Router>
但是,在将一堆路线组合在一起时,是否有可能实现这一目标?
经过一些研究,我想出了这个:
import React, {PropTypes} from "react"
import {Route} from "react-router-dom"
export default class AuthenticatedRoute extends React.Component {
render() {
if (!this.props.isLoggedIn) {
this.props.redirectToLogin()
return null
}
return <Route {...this.props} />
}
}
AuthenticatedRoute.propTypes = {
isLoggedIn: PropTypes.bool.isRequired,
component: PropTypes.element,
redirectToLogin: PropTypes.func.isRequired
}
在 中调度操作是否正确?感觉不对劲。它似乎也与其他钩子不符。render()
componentDidMount