先日の記事で、React Navigation でページのルーティングと、タブナビゲーションを実装できると紹介しました。
が、タブナビゲーションの実装に若干手こずり、別のライブラリを使用することに。
個人的に、「react-native-tab-view」というライブラリが分かりやすかったので、その実装方法についてまとめ。
GitHub のページはこちらから。
GitHub – satya164/react-native-tab-view: A cross-platform Tab View component for React Native
https://github.com/satya164/react-native-tab-view
まず、ライブラリのインストールは下記のコマンドで行います。
また、react-native-gesture-handler
と react-native-reanimated
も必要なので、こちらも併せてインストールします。
npm install react-native-tab-view --save expo install react-native-gesture-handler react-native-reanimated
上記のコマンドの実行が完了したら、実際にコードを書いていきます。
サンプルコードは下記の通りです。
import React, { Component } from 'react'; import { TabView, SceneMap, TabBar } from 'react-native-tab-view'; import TabPage1 from './TabPage1'; import TabPage2 from './TabPage2'; import TabPage3 from './TabPage3'; const routes = [ { key: 'tab1', title: 'タブ1' }, { key: 'tab2', title: 'タブ2' }, { key: 'tab3', title: 'タブ3' } ]; class App extends React.Component { constructor(props) { super(props); this.state = { index: 0, } this.changeTab = this.changeTab.bind(this); } changeTab(index) { this.setState({ index: index }); } render() { const renderScene = SceneMap({ tab1: TabPage1, tab2: TabPage2, tab3: TabPage3, }); const index = this.state.index; return ( <TabView navigationState={{ index, routes }} renderScene={renderScene} onIndexChange={this.changeTab} tabBarPosition='bottom' /> ); } } export default App;
なお、上記のサンプルではナビゲーションタブは下に表示されるようにしています。
また、このサンプルではタブに表示されるのはタイトルの文字のみです。
タブにアイコンを表示する方法については、こちらのサイトが参考になりました。
タブ(TabNavigator)をコンポーネント化してスクリーン内に組み込む – Qiita
https://qiita.com/mildsummer/items/0da92ed6785db0d03e8f
個人的に、タブが切り替わった時に行いたい処理があったため、こちらのライブラリの方が使いやすいように感じました。
また、スワイプでタブ切り替えをする/しないの設定ができたり、選択中のタブの下に下線が入っているのも良かったですね。
React Navigation
も良かったのですが、私はこちらの方が好きでした。
以上、React Native でタブナビゲーションを実装できるライブラリ「react-native-tab-view」のご紹介でした。
ご参考になれば幸いです。