Redux と共に redux-simple-router を使おうと思っているので、react-router をおさらいするためにサンプルコードをざっと読んでみました。
以下、読んだときのメモ。
Active Links
<Link>
の activeStyle
アトリビュートでリンクがアクティブなときのスタイルを定義できる。
Animations
URL遷移をする際に componentWillReceiveProps
が呼び出されて遷移先のパスが取得できるということは理解した。
あと ...props
は使いどころによっては便利だと思いました。
Auth Flow
<Route>
の onEnter
にコールバックを渡しておくと、そのパスが有効になった際にそいつが呼ばれるようだ。
サンプルではそのコールバック内で未ログイン時にログインコンポーネントを描画するURLに遷移させている。
Auth With Shared Root
<Router>
の routes
に設定するオブジェクト内で、 <Route>
に対応する部分に component
で直接描画対象のコンポーネントを指定するのではなく getComponent
で描画対象のコンポーネントをコールバック経由で指定する方法を示している。
Breadcrumbs
this.props.routes
で現在有効なrouteまでの経路が配列として取れるので、それを元にパンくずを表示できるってことらしい。
Dynamic Segments
<Route path="user/:userID">
のように設定したパラメータは this.props.params
としてアクセスできる。
<Recirect>
の from
と to
でも利用できる。
Huge Apps (Partial App Loading)
<Route>
の childRoutes
も component
と同様に getChildRoutes
でコールバック関数での設定にできる。
サンプルは require.ensure
を通じてオンデマンドでコンポーネントを読み込むように構成されている。
Master Detail
このサンプルで何を伝えたいのかイマイチよくわからないが、Flux臭を感じるのでそこら辺だろうか。
history.pushState
を使ってるけど、これは v1.1.0 で router.push
に置き換わるはず。
Passing Props to Children
React.cloneElement
でレンダリング対象の this.props.children
にアトリビュートを設定しているのがミソでしょうか。
Pinterest-style UI (location.state)
<Link>
に state
アトリビュートでオブジェクトを渡すと、遷移時の componentWillReceiveProps
で nextProps.location.state
としてアクセスできるということのようだ。
Nested Animations
これもサンプルで示したいことが何なのかイマイチわからない。
アニメーションの実装に必要なコード自体はAnimationsよりすっきりしていて、むしろあっちの方が要らない子なのかも。
Query Params
URLのクエリパラメータは <Link to="/user/bob" query={{ showAge: true }}>
のように渡して this.props.location.query
で参照できる。
Shared Root
path
を指定しないコンポーネントをroutesのツリーに組み込んで、いくつかのパスの共通の親コンポーネントとして構成することができる。
Sidebar
<Route>
の components
はkey-value形式で複数設定することができる。この形式で設定した場合は、描画コンポーネントは this.props
に children
ではなく、 components
に指定したキーで取得する。
Transitions
Lifecycle
mixin の routerWillLeave
でURL遷移の確認ダイアログを実装しているけれど、v1.1.0でmixinは無くなるとかいう話が...