認証済みルートを実装しようとしていましたが、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>
andを使用しないでください。無視されます<Route children>
<Route children>
その場合、これを実装する正しい方法は何ですか?
react-router
(v4)ドキュメントに表示され、次のようなことを示唆しています
<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
または他のフックでも、実際には正しくないようです。