こんにちは、nishi_talk(@nishi_talk)です。
今回はReact Naiteviでアプリケーションのルーディングとナビゲーションを設定するReact Navigationの使い方をご紹介します。
React NavigationはReact Naiteviでページ遷移を実装することができます。
今回は例として、HOMEページとPROFILEページへ遷移できるようにします。

今回使用するReact Navigationの公式サイトはこちら。
ドキュメントなどは本家を参考にしてください。
パッケージのインストール
まずは、React Navigationのパッケージをインストールします。
$ npm install --save react-navigation
ファイルの設定
今回設定するReact Nativeのファイル構造です。
App.jsでアプリの自体の設定。
router.jsでアプリのルーティングの設定。
containerフォルダの中にあるのが、ページの大枠を作る。
App.js package.json src ├── container │ ├── HomeScreen.js │ └── ProfileScreen.js ├── reducers │ └── index.js └── router.js
React Nativeの設定
App.jsには以下を記述します。
import React from 'react'
import { createStore } from 'redux'
import { Provider } from 'react-redux'
import rootReducer from './src/reducers'
import RootStack from './src/router'
const store = createStore(rootReducer)
class App extends React.Component {
render() {
return (
<Provider store={store}>
<RootStack />
</Provider>
)
}
}
export default App
ルーティングの設定
src/router.jsには以下を記述します。
import React from 'react'
import { createBottomTabNavigator } from 'react-navigation'
import HomeScreen from './container/HomeScreen'
import ProfileScreen from './container/ProfileScreen'
export default createBottomTabNavigator({
Home: {
screen: HomeScreen,
navigationOptions: {
showLabel: false,
showIcon: true
}
},
Profile: ProfileScreen
})
import { createBottomTabNavigator } from 'react-navigation'
createBottomTabNavigatorコンポーネントを使用します。
export default createBottomTabNavigator({
Home: {
screen: HomeScreen,
navigationOptions: {
showLabel: false,
showIcon: true
}
},
Profile: ProfileScreen
})
この部分で、createBottomTabNavigatorの内容を指定します。
Home:でナビゲーションの名前を指定して、最初の画面を表示する画面を指定します。
navigationOptionsでナビゲーション部分のオプションを指定します。
その他のオプションの指定方法はドキュメントを見てください。
各ページを作成
containerフォルダにHomeScreenとProfileScreenを作成して、以下を記述します。
src/container/HomeScreen.js
import React from 'react'
import { View, Text } from 'react-native'
class HomeScreen extends React.Component {
render() {
return (
<View style={styles.textContainer}>
<Text style={styles.text}>HOME</Text>
</View>
)
}
}
const styles = {
text: {
fontSize: 24
},
textContainer: {
alignItems: 'center',
justifyContent: 'center',
flex: 1,
backgroundColor: '#dddddd'
}
}
export default HomeScreen
src/container/ProfileScreen.js
import React from 'react'
import { View, Text } from 'react-native'
class ProfileScreen extends React.Component {
render() {
return (
<View style={styles.textContainer}>
<Text style={styles.text}>Profile page</Text>
</View>
)
}
}
const styles = {
text: {
fontSize: 24
},
textContainer: {
alignItems: 'center',
justifyContent: 'center',
flex: 1,
backgroundColor: '#dddddd'
}
}
export default ProfileScreen
reducersを作成
今回は特に意味を持たないので、ダミーの記述をしてます。
src/reducers/index.jsに以下の記述をします。
import { combineReducers } from 'redux'
export default combineReducers({
sample: () => []
})