React Nativeでのナビゲーションに便利なReact Navigation
2018-5-10追記: 先日v2も出ました。今目にしているブログ記事はだいぶ古いと思うので注意です。React Navigation (v2) · Routing and navigation for your React Native apps
2017/9/15追記: React Navigationは開発サイクルがしばらく停滞していたけれど、最近仕切り直しがあった。うまく行くといいな。https://reactnavigation.org/blog/2017/9/Renewed-v1
2017/3/17追記: beta-7時点で、ネストされたナビゲーター内からナビゲーター全体のstackをリセットできないという問題がある。ので、認証してトップに戻るとか、アップロード完了したらトップに戻るとかまともにできないと思うので辛そう。Specify reset key to define what state should be reset · Issue #691 · react-navigation/react-navigation · GitHub
2017/3/15追記: 記事中で「ナビゲーションライブラリは収束しつつある模様」という旨のことを書いたけれども、昨日Airbnbからナビゲーションライブラリが発表されたりと、依然動きはある。ExNavigationとNavigationExperimentalはReact Navigationに後続したというのが観測範囲。*1 *2
React Nativeでのナビゲーションは、標準のコンポーネント(Navigation
)だと辛いものがあった。
そこでいくつか他の実装が出てきてたのだけど(ExNavigationとか)、最近はReact Navigation (v2) · Routing and navigation for your React Native appsに収束しつつある模様。
手元のプロジェクトでも使っているけど、見通しが良いコードを書けたのでかなり満足。
Navigation
での辛さを解決するための、Navigation Experimental
というその名の通り実験的なコンポーネントも一応React Native内で提供されていたけど、0.43.0からはDeprecatedになる。公式でも React Navigation 推しになるからだ。
React Nativeであれば、index.ios.js
で以下のようにコンポーネントを読み込んで、ルーティングを書いてやればよい。
import { StackNavigator, } from 'react-navigation'; const BasicApp = StackNavigator({ Main: {screen: MainScreen}, Profile: {screen: ProfileScreen}, });
他のスクリーン(コンポーネント)内から目的のスクリーンに遷移する際は以下のようにnavigate('Profile', { name: 'Jane' })
と、遷移先のKeyと、必要に応じてプロパティをメソッドに渡す。
class MainScreen extends React.Component { static navigationOptions = { title: 'Welcome', }; render() { const { navigate } = this.props.navigation; return ( <Button title="Go to Jane's profile" onPress={() => navigate('Profile', { name: 'Jane' }) } /> ); } }
なお上記の例はReact Navigation (v2) · Routing and navigation for your React Native appsからそのまま拝借したもの。
懸念があるとすれば、2017/3/9現在のバージョンがv1.0.0-beta.6
であることだ。個人的にもそこにためらいがあったものの、試しに導入して見たところ手元のユースケースの範囲では特段困ることはなかったので導入してしまった(計9スクリーン、TabとStackのネスト。そこまで大きくない)。得られる恩恵が大きすぎた。
また、React Nativeコミュニティが関わっているプロジェクトに対する信頼もある。レポジトリやコミュニティを眺める限り、Breaking changesがあればそれ相応のマイグレーションのための対応がされるはずだと信じている。
そういえば、先日のReact Native Team AMA Liveでも、これからReact Native始めるなら現時点ではReact Navigationを見るといいって言及されてたっけな。
6:14秒あたりから。そのちょっと前には、Reactでwebアプリ書き始めるならReact Router使うといいよ、って言ってる。
React Navigation (v2) · Routing and navigation for your React Native apps
関連
書いた: メモ: React Navigation を使い始める時に確認すると良さそうなこと (v1.0.0-beta.10時点) - taiki-t's diary
*1:https://reactnavigation.org/blog/2017/1/Introducing-React-Navigation には次のように記載されている。
It replaces and improves upon several navigation libraries in the ecosystem, including Ex-Navigation and React Native's Navigator and NavigationExperimental components.
GitHub - expo/ex-navigation: Route-centric navigation for React Native には
The successor to ExNavigation, "react-navigation", is now in public beta.
NavigationExperimentalについては冒頭のdeprecation commitより
The NavigationExperimental views live on in the React-Navigation project,