ReactJSでシングルページアプリケーション(SPA)を開発していますが、ログインページを別のページに配置する方法を知りたいのですが。
アプリケーションのベースとしてcreate-react-app
を使用しており、現在、SPAのテンプレートをApp.js
ファイルで定義しており、各コンポーネントを異なる.jsファイルで定義しています:Page1.js
、 Page2.js
など。アプリのルーティングにreact-router-dom
(V ^ 4.2.2)を使用しています。
私のApp.js
ファイル:
//node_modules (using ES6 modules)
import React, { Component } from 'react';
import { BrowserRouter as Router, Route } from 'react-router-dom';
//others
import { Home } from './pages/Home.js';
import { Page1 } from './pages/Page1.js';
import { Page2 } from './pages/Page2.js';
//App variables
const { Content, Footer, Sider } = Layout;
class App extends Component {
render() {
return (
<Router>
<Layout>
<Sider>
//some code
</Sider>
<Layout>
<Header>
//some code
</Header>
<Content>
<Route exact path="/" component={Home}/>
<Route path="/page1" component={Page1}/>
<Route path="/page2" component={Page2}/>
</Content>
<Footer>
//some code
</Footer>
</Layout>
</Layout>
</Router>
);
}
}
export default App;
コードにジャンプする前に、次のことに注意してください。
react-route-dom
(別名react router v4以降)のRoute
は単なるComponent
であり、ビューをレンダリングするのはStatelessComponentまたはComponentClassの場合があります。ここで参照できます、
https://reacttraining.com/react-router/web/guides/philosophy
あなたの質問では、
ログインページを別のページにするにはどうすればよいですか?
Login
なしでLayout
ビューをレンダリングしたい場合は、この方法を使用することをお勧めします。
inApp.js
import Main from './Main'; // Your original <App /> page
import Login from './Login'; // Your new <Login /> page
// In your App component
<Router>
<Switch>
<Route exact path="/" component={Main} />
<Route path="/login" component={Login} />
</Switch>
</Router>
// Export your App component
ここで言及したい点がいくつかありますが、
Route
から1つのビューのみをレンダリングするようにするため、1つまたは複数の<Switch>
を含む<Route />
を追加します(<Route />
はビューをレンダリングするコンポーネントにすぎないことに注意してくださいurlとの一致するパスに基づきます)。したがって、<PageABC />
を<Switch />
でラップすることをお勧めします。そうしないと、すべてのビューがバックグラウンドでレンダリングされます。<Main />
を作成し、元の<App />
コンポーネントレイアウトを新しく作成された<Main />
でラップしてみてください。ログインページのレイアウトを使用して、<Login />
コンポーネントも作成します/login
にアクセスしてログインページに自由に移動し、URLの/
でメインページに戻ることができます。 承認済みおよび未承認ルートを作成する場合は、このチュートリアルを確認できます All About React Router 4<Redirect to="/somePublicUrl" />
を追加して、URLがどのルートパスとも一致しない場合にアプリが常に何らかのビューをレンダリングするようにすることができますお役に立てば幸いです。何かがあなたの頭を包まないならば、私に知らせてください。