2018年6月19日
React Navigationでタブナビゲーションを作ろう!


はじめに
今回はアプリでよく見かける、画面下部のタブナビゲーションをReact Navigationを使って実装する方法をご紹介します!
Bageleeでは以前、React Navigationを使って、アプリ内のテキストをタップして画面遷移する方法をご紹介しました。
React Navigationそのものに関しては、こちらの記事で説明されているのでぜひご覧ください。
React Navigationの導入
まずはReact Navigationを導入しましょう。
$ yarn add react-navigation
もしくは
$ npm install --save react-navigation
を実行してインストールします。
タブナビゲーションを実装してみる
最初に、このようなReact Nativeデフォルト+少し見た目をカスタマイズしたタブナビゲーションを実装していきます!
「Home」と「Detail」というタブがあって、タブを押す度に画面が切り替わります。

このように、画面下にタブナビゲーションを設置したい場合は、
React Navigationの createBottomTabNavigator コンポーネントを使用します。
App.js は以下のようなコードになります。
import React, { Component } from 'react';
import {
  Text,
  View
} from 'react-native';
import { createBottomTabNavigator} from 'react-navigation';
class HomeScreen extends React.Component {
  render() {
    return (
      <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
        <Text>HomeScreen</Text>
      </View>
    );
  }
}
class DetailScreen extends React.Component {
  render() {
    return (
      <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
        <Text>DetailScreen</Text>
      </View>
    );
  }
}
const RootStack = createBottomTabNavigator(
  {
    Home: {
      screen: HomeScreen,
    },
    Detail: {
      screen: DetailScreen,
    },
  },
  {
    initialRouteName: 'Home',
  }
);
export default class App extends React.Component {
  render() {
    return <RootStack />;
  }
}
コードの解説
最初にタブナビゲーションを生成するために使用する createBottomTabNavigator を読み込みます。
import { createBottomTabNavigator} from 'react-navigation';
コード前半の以下の部分で、今回切り替えられる画面である HomeScreen と DetailScreen の2つのコンポーネントを生成しています。
class HomeScreen extends React.Component {
  render() {
    return (
      <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
        <Text>HomeScreen</Text>
      </View>
    );
  }
}
class DetailScreen extends React.Component {
  render() {
    return (
      <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
        <Text>DetailScreen</Text>
      </View>
    );
  }
}  
この切り替えられる画面(コンポーネント)のことを、React Navigationでは「スクリーン」と呼びます。
今回は説明の都合上、 App.js 内に「Home」と「Detail」の2つのスクリーンを定義していますが、実際の開発ではスクリーンごとにコンポーネントを作成したほうがわかりやすいと思います。
const RootStack = createBottomTabNavigator(
  {
    Home: {
      screen: HomeScreen,
    },
    Detail: {
      screen: DetailScreen,
    },
  },
  {
    initialRouteName: 'Home',
    tabBarOptions: {
      activeTintColor: '#ffffff',
      activeBackgroundColor: '#5ab4bd',
      inactiveBackgroundColor: '#ffffff',
      style: { borderTopWidth: 2, borderTopColor: '#5ab4bd' },
    }
  }
);
1番重要な、タブナビゲーションを生成している部分です。
まず、createBottomTabNavigator の第一引数で、スクリーン名とスクリーンコンポーネントの紐づけを行っています。
今回のコードだと、「Home」と HomeScreen、「Detail」とDetailScreenを紐づけています。
第二引数には、タブナビゲーションのオプションを指定します。
initialRouteName には、初期のルートのスクリーン名(アプリを開いたときに表示するスクリーン)を指定します。今回の場合だと、「Home」を設定しているので、開いたときにはHomeScreenが表示されるようになっています。
また、tabBarOptions でタブナビゲーションの見た目などをカスタマイズすることができます。
今回は、
- activeTintColor: アクティブなタブのラベルとアイコンの色
- activeBackgroundColor: アクティブなタブの背景色
- inactiveBackgroundColor: 非アクティブなタブの背景色
- style: タブナビゲーション自体のスタイル
の4つのオプションを使って見た目を変更してみました。
このほかにもいろいろなオプションがあるので、公式リファレンスを参考にしてみてください。
export default class App extends React.Component {
  render() {
    return <RootStack />;
  }
}
最後に、タブナビゲーションを定義した RootStack をApp.jsの返り値に渡してあげます。
これでアプリの下部にタブナビゲーションが表示されるようになりました!
まとめ
今回は、React Navigationを使って画面下部にタブナビゲーションを実装する方法をご紹介しました!
多くのアプリで必要になるタブナビゲーションでの画面遷移ですが、React Navigationを使うと簡単に実装できるのでオススメです!
ただ、このReact Nativeデフォルトのタブナビゲーションだと、見た目は少しカスタマイズできますが寂しい感じがしますよね。
そこで次回は、React Navigationのタブナビゲーションのカスタマイズをする方法をご紹介します!自分で制作しているアプリのデザインに合うように、タブナビゲーションの見た目をカスタマイズしましょう!
のお仕事に関するご相談
Bageleeの運営会社、palanではに関するお仕事のご相談を無料で承っております。
zoomなどのオンラインミーティング、お電話、貴社への訪問、いずれも可能です。
ぜひお気軽にご相談ください。
この記事は
参考になりましたか?
4
1
関連記事

2022年6月14日
Figmotionの使い方

2022年5月13日
Reactでオセロゲームを作る

2022年3月25日
【Spoke】アプリ不要!WebだけでVR空間を作ろう!

2022年2月25日
palanXRサイトリニューアルの流れをご紹介します!

2021年12月25日
vanilla-extractで型安全なCSSを書こう!

2021年12月24日
Miroを使ったプロジェクトの振り返り
簡単に自分で作れるWebAR
「palanAR」はオンラインで簡単に作れるWebAR作成ツールです。WebARとはアプリを使用せずに、Webサイト上でARを体験できる新しい技術です。
palanARへ 
palanでは一緒に働く仲間を募集しています
正社員や業務委託、アルバイトやインターンなど雇用形態にこだわらず、
ベテランの方から業界未経験の方まで様々なかたのお力をお借りしたいと考えております。
運営メンバー

Eishi Saito 総務
SIerやスタートアップ、フリーランスを経て2016年11月にpalan(旧eishis)を設立。 マーケター・ディレクター・エンジニアなど何でも屋。 COBOLからReactまで色んなことやります。
sasakki デザイナー
アメリカの大学を卒業後、日本、シンガポールでデザイナーとして活動。

やまかわたかし デザイナー
フロントエンドデザイナー。デザインからHTML / CSS、JSの実装を担当しています。最近はReactやReact Nativeをよく触っています。
Sayaka Osanai デザイナー
Sketchだいすきプロダクトデザイナー。シンプルだけどちょっとかわいいデザインが得意。 好きな食べものは生ハムとお寿司とカレーです。

はらた エンジニア
サーバーサイドエンジニア Ruby on Railsを使った開発を行なっています

こぼり ともろう エンジニア
サーバーサイドエンジニア。SIerを経て2019年7月に入社。日々学習しながらRuby on Railsを使った開発を行っています。

ささい エンジニア
フロントエンドエンジニア WebGLとReactが強みと言えるように頑張ってます。

Damien
WebAR/VRの企画・開発をやっています。森に住んでいます。

ゲスト bagelee

かっきー

まりな

suzuki
miyagi

ogawa
雑食デザイナー。UI/UXデザインやコーディング、時々フロントエンドやってます。最近はARも。

いわもと
デザイナーをしています。 好きな食べ物はラーメンです。

taishi kobari
フロントエンドの開発を主に担当してます。Blitz.js好きです。

kubota shogo
サーバーサイドエンジニア。Ruby on Railsを使った開発を行いつつ月500kmほど走っています!
nishi tomoya

aihara
グラフィックデザイナーから、フロントエンドエンジニアになりました。最近はWebAR/VRの開発や、Blender、Unityを触っています。モノづくりとワンコが好きです。
nagao
SIerを経てアプリのエンジニアに。xR業界に興味があり、unityを使って開発をしたりしています。

Kainuma
サーバーサイドエンジニア Ruby on Railsを使った開発を行なっています

sugimoto
asama
ando
iwasawa ayane

oshimo
異業界からやってきたデザイナー。 palanARのUIをメインに担当してます。 これからたくさん吸収していきます!









 
 
 
 
