私のアプリの一部をログインユーザーに限定したいと思っています。 私は以下のコードを使用してこれを動作させています。React JS Switch Routerがadminページのみ404ページを表示しない
しかし、以前は一致するルートが見つからない場合にスイッチスイッチを使用して404ページにユーザーを送信していました。私はApp.jsxユーザーにEnsureLoggedInコンポーネントを追加するため、いくつかの理由
は、404ページにリダイレクトされることはありません。テスト:URLにランダムパスを入力してください。 404ページにルーティングする必要があります。
- isLoggedIn =偽:ユーザーは、/ログインページにリダイレクトされます。
- isLoggedIn = true:一致するルートが見つからず、ページコンテナが空にレンダリングされます。
私は少しとの誰かがより多くの経験は、この上で私を操縦することができますリアクト願って404
をレンダリングし、その後、スイッチルータは、ルートの試合のいずれもいるのでEnsureLoggedIn内にネストされているものを無視することを期待したいです。しかし、あなたの<EnsureLoggedIn>
コンポーネントはとにかくレンダリングされると、明示的で<Switch>
排他性を回避 -
App.jsx
<BrowserRouter>
<Header/>
<Switch>
<Route exact path="/" component={HomePage}/>
<Route exact path="/someotherpage" component={SomeOtherPage}/>
<EnsureLoggedIn>
<Route exact path="/dashboard" component={Dashboard}/>
</EnsureLoggedIn>
<Route component={Error404Page}/>
</Switch>
<Footer/>
</BrowserRouter>
EnsureLoggedIn.jsx
class EnsureLoggedIn extends Component {
constructor(props) {
super(props);
this.state = {isLoggedIn: false};
}
render() {
const isLoggedIn = this.state.isLoggedIn;
if (isLoggedIn) {
return this.props.children
} else {
return (<Redirect to="/login" />);
}
}
}
感謝。私はまた、反応ルータv4はネストされたルートを好まないことも発見しました。私は時代遅れのチュートリアルで私のアプローチに基づいていた。 – elMarquis