2018年3月15日
プログラミング
ActivityIndicatorでローディング画面をつくる 【これからはじめるReact Native】
はじめに
前回はModalの使い方について解説しました。
今回は、少し大きめのデータ通信を行う際など、アプリでローディングに時間のかかる処理時にローディング画面を見せる方法をご紹介します。
こういったローディング時、何も表示されず数秒固まってしまうと、フリーズが起きたのかなとユーザーは不安になります。
そんなときにインジケータと呼ばれるぐるぐる回るアイコンが表示されていれば、「今はローディング中なんだな」とユーザーを少し安心させることができます。
今回はそんなインジケータを実現するActivityIndicator
コンポーネントを使ってみます。
ActivityIndicatorを使ってみる
では、いつものようにSnack Expoを使ってみましょう。
このようなイメージになります。
コードの解説
では、いつものようにコードの解説をしていきます。
import { ActivityIndicator, View, StyleSheet } from 'react-native';
こちらでActivityIndicator
コンポーネントを読み込んでいます。
state = {
animating: true
}
初期化処理をしています。
animating
にtrue
を初期値として設定しています。
componentDidMount() {
setTimeout(() => {
this.setState({ animating: false });
alert("はじまるよー!");
}, 10000);
}
componentDidMount
は以前コンポーネントのライフサイクルイベントを解説したように、コンポーネントがマウントされたら発生するイベントです。
setTimeout(() => {
this.setState({ animating: false });
alert("はじまるよー!");
}, 5000);
setTimeout
は一定時間後に処理を行うことができます。
繰り返しは行わず、1回だけ処理を行います。
引数を2つ持ち、1つ目は実行する処理、そして2つ目は処理を実行するまでの時間(ミリ秒)です。
なので今回の場合は() からはじまる関数部分を、第二引数である5秒(5000ミリ秒)後に実行する、というものです。
詳しく見ていくと
this.setState({ animating: false });
こちらでanimating
にfalse
を設定しています。
そしてこちらでアラートを実行しています。 alert("はじまるよー!");
初期化処理でanimating
にtrue
を設定していましたが、この処理でコンポーネントがマウントされてから5秒後にanimating
にfalse
が設定されていますね!
const animating = this.state.animating
先程設定したstate
のanimating
をanimating
という変数に設定しています。
this.state.~
の部分をそのまま値に設定すると、コードのメンテナンス性が良くない点もあり、こうして変数に設定することが多いです。
const
は再代入不可能な変数です。
<ActivityIndicator
animating = {animating}
color = '#0000aa'
size = "large"
style = {styles.activityIndicator}/>
ここがActivityIndicator
の表示箇所です。
いくつかprops
を見ていきます。
animating
はインジケータの表示、非表示を制御します。
デフォルトはtrue
で表示状態となっています。
先程ご紹介した初期化処理でanimating
(正確にはthis.state.animating
)にtrue
、そして5秒経ったらfalse
が設定されましたね。
color
ではインジケータの色を設定できます。
size
は大きさを表し、small
とlarge
の2種類があります。
流れの振返り
- まず初期化処理で
state
のanimating
にtrue
が設定される。 state
のanimating
をanimating
変数にセットする。ActivityIndicator
コンポーネントでanimating
にanimating
変数が設定され、インジケータがレンダリングされる。setTimer
で5秒経ったらanimating
にfalse
が設定される。state
に変更があったので、ActivityIndicator
コンポーネントでanimating
(state
のanimating
)が更新され、インジケータが再レンダリングされる。- アラートが実行される。
POINT!!
constは再代入不可能にも関わらず、どうしてanimatingの更新を検知できるのか疑問に思われる方もいるのではないでしょうか?
animatingに入っているのはstateのanimatingです。このstate自体を変更することは再代入ではなく、stateが変更されているので再レンダリングされ、animatingも再定義されています。。
まとめ
今回はローディングアニメーションを表示可能なActiveIndicator
コンポーネントをご紹介しました。
小さな演出ではありますが、確実にローディングしているという安心感をユーザーに与えることができます。
ぜひ活用してみてください。
React Nativeのお仕事に関するご相談
Bageleeの運営会社、palanではReact Nativeに関するお仕事のご相談を無料で承っております。
zoomなどのオンラインミーティング、お電話、貴社への訪問、いずれも可能です。
ぜひお気軽にご相談ください。
この記事は
参考になりましたか?
1
0
関連記事
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
oshimo
異業界からやってきたデザイナー。 palanARのUIをメインに担当してます。 これからたくさん吸収していきます!