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のタブナビゲーションのカスタマイズをする方法をご紹介します!自分で制作しているアプリのデザインに合うように、タブナビゲーションの見た目をカスタマイズしましょう!
React Nativeのお仕事に関するご相談
Bageleeの運営会社、palanではReact Nativeに関するお仕事のご相談を無料で承っております。
zoomなどのオンラインミーティング、お電話、貴社への訪問、いずれも可能です。
ぜひお気軽にご相談ください。
この記事は
参考になりましたか?
4
1
関連記事
2021年8月30日
React Navigation 6.0のStack Navigatorの大きく変わった箇所の変更点をまとめてみた
2021年1月4日
react-native-svgを使ってReact NativeでSVGを扱う
2019年12月23日
Expo Bare Workflow で Firebase Analytics を設定する
2018年12月6日
【React Native】キーボードで画面が隠れる場合の対処法
2018年7月13日
TypeScriptでReact Native開発をする方法2018年最新版
2018年6月29日
React Navigationのタブナビゲーションをカスタマイズしてみよう!
簡単に自分で作れる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
yoko oshimo
異業界からやってきたデザイナー。palanARのUIをメインに担当してます。これからたくさん吸収していきます!