react-router v4のあれこれ
React用ルーティングライブラリ
github.com
React単体だと、URLとアプリの描画状態が紐付いていない。
ルーティングライブラリを導入すると、、
・特定URLを打ち込むと、特定の画面に遷移
・特定の画面状態を、URLに反映
が、できるようになる💁♂️
web向けに導入する際はreact-router-domを入れる
$ npm i react-router-dom
基本的な使い方
BrowserRouter内にRouteを配置すると、URLに合わせて表示コンポーネントを変えてくれる。pathは前方一致なので、'/'にはexactを指定する(でないと'/about'も'/categories'もHomeが表示されてしまう)。
Linkを使って画面遷移(URL更新含む)ができる。
import React from 'react'; import { BrowserRouter, Route, Link } from 'react-router-dom'; const App = () => ( <BrowserRouter> <div> <ul> <li><Link to='/'>Home</Link></li> <li><Link to='/about'>About</Link></li> <li><Link to='/categories'>Categories</Link></li> </ul> <Route exact path='/' component={Home} /> <Route path='/about' component={About} /> <Route path='/categories' component={Categories} /> </div> </BrowserRouter> )
urlのパスにidを含めて特定のページを表示させたい時はこんな感じ。
Routeは自動的にpropsを受け取るので、そこから指定されたidを取得することができる。
<Route exact path='/categories' component={Categories} /> <Route path='/categories/:id' component={Category} /> ... const Category = props => { const { id } = props.match.params; return ( <div>Category number is '{id}'.</div> ); }
ちなみに自動でセットされるpropsとは別にデータを渡したい時は、こんな感じに記述する
<Route path='/categories/:id' render={props => <Category match={props.match} state={this.state} />} /> ... const Category = props => { const { id } = props.match.params; const { color } = props.state;
参考