ReactにReact Routerを導入しましたので、その手順の共有と簡単な解説をしていきます。
react-routerはReactで作成したアプリケーションにルーティングを簡単に実装することができるコンポーネントです。
前置き
今回手順を紹介するreact-routerのバージョンは4.2.2です。
React Routerはバージョン4から仕様が大幅に変わりました。
v4ではWeb/Native(モバイルアプリなど)/anywhere(コアパッケージ)的な別れ方をしていて、Webで利用する場合は派生先であるreact-router-domをimportすれば、元々のreact-routerを導入する必要はありません。
Reactの環境については作成済みであることを前提で進めさせていただきます。
僕はいつもこちらのサイトのclient部分を参照させていただきながら構築しています。いつもありがとうございます。
React Routerの導入
まずはパッケージをインストールします。
yarn add react-router-dom
npmの場合は以下の通り。
npm install react-router-dom
全体のソースコードは以下の通りになります。GitHubにもソースを配置しましたので、よかったら参考にしてみてください。
https://github.com/stobita/react-router-sample
import React from 'react' import { render } from 'react-dom' import { BrowserRouter, Route, Link } from 'react-router-dom' class App extends React.Component{ render(){ return ( <BrowserRouter> <div> <ul> <li><Link to="/">Top</Link></li> <li><Link to="/about">このサイトについて</Link></li> <li><Link to="/contact">お問い合わせ</Link></li> </ul> <Route exact path="/" component={TopPage}/> <Route path="/about" component={About}/> <Route path="/contact" component={Contact}/> </div> </BrowserRouter> ) } } class TopPage extends React.Component{ render(){ return ( <h1>トップページです!ようこそ!</h1> ) } } class About extends React.Component{ render(){ return ( <h1>このサイトについてです!読んで!</h1> ) } } class Contact extends React.Component{ render(){ return ( <h1>お問い合わせです!問い合わせて!</h1> ) } } render( <App />, document.getElementById('app') )
重要な箇所だけ抽出して簡単に説明させていただきます。
import { BrowserRouter, Route, Link } from 'react-router-dom' class App extends React.Component{ render(){ return ( <BrowserRouter> <div> <ul> <li><Link to="/">Top</Link></li> <li><Link to="/about">このサイトについて</Link></li> <li><Link to="/contact">お問い合わせ</Link></li> </ul> <Route exact path="/" component={TopPage}/> <Route path="/about" component={About}/> <Route path="/contact" component={Contact}/> </div> </BrowserRouter> ) } }
- react-router-domからBrowserRouter,Route,Linkをimportします。
- renderするコンポーネントの中身をBrowserRouterコンポーネントで囲います。
- BrowserRouterの中で、Routeコンポーネントにルートから見た時のパス(path)と実際にそのパスにアクセスされた時に描写するコンポーネント(component)を渡して配置します。ルートパスにexactというオプションをつけていますが、これはルートパスの時だけTopPageコンポーネントを呼び出すための設定です。これがないと、例えばhttp://localhost:4000/aboutで指定した時もTopPageがAboutと一緒に描写されてしまいます。
- Linkコンポーネントに遷移先(to)にRouteのpathに設定したパスを記載することで、それぞれのコンポーネントに遷移するためのリンクが作成されます。
もちろんRouteのcomponentに渡すコンポーネントは関数型コンポーネントでもOKです。
const TopPage = props => { return ( <h1>トップページです!ようこそ!</h1> ) } const About = props => { return ( <h1>このサイトについてです!読んで!</h1> ) } const Contact = props => { return ( <h1>お問い合わせです!問い合わせて!</h1> ) }
まとめ
パラメータを利用したルーティングの機能も提供しておりますが、その辺はまた後ほどご紹介できればと思います。
今回の記事がどなたかのお役に立てば幸いです。
閲覧いただき、ありがとうございました。