React Nativeでローディングインジケーターを表示する方法|ActivityIndicatorの使い方を解説
ローディングインジケーターは、ユーザーがUI上で行ったリクエストに時間がかかることを伝えるための重要なUI要素です。たとえば、フォーム入力後の送信ボタンをクリックしたときや、検索ボタンを押してデータを取得する際などに表示することで、アプリが動作中であることをユーザーに明確に示せます。
React Nativeでは、標準搭載されているActivityIndicatorコンポーネントを使うだけで、簡単にローディングインジケーターを実装できます。
ActivityIndicatorの基本形
ActivityIndicatorの基本的な記述方法は以下のとおりです。
<ActivityIndicator animating={animating} color="#bc2b78" size="large" style={yourStyle} />
ActivityIndicatorを使用するには、react-nativeからインポートします。
import { ActivityIndicator } from 'react-native';
ActivityIndicatorの主なプロパティ
| No. | プロパティと説明 |
|---|---|
| 1 | animating アニメーションの表示・非表示を制御します。 trueでインジケーターを表示し、falseで非表示にします。 |
| 2 | color スピナーの色を指定します。 |
| 3 | hidesWhenStoppedtrueの場合、アニメーションが停止すると同時にインジケーターを非表示にします(iOS専用プロパティ)。 |
| 4 | size インジケーターのサイズを指定します。「small」「large」のほか、Androidでは数値による指定も可能です。 |
実装例:ローディングインジケーターの表示
まず、必要なコンポーネントをインポートします。
import { ActivityIndicator, View, StyleSheet } from 'react-native';
次に、ActivityIndicatorコンポーネントを配置します。
<ActivityIndicator
animating={animating}
color="#bc2b78"
size="large"
style={styles.activityIndicator} />
animatingにはstate変数を渡しており、初期値はtrueです。componentDidMount()内でcloseActivityIndicatorメソッドを呼び出し、60秒(60000ミリ秒)後にanimatingをfalseに切り替えることで、一定時間後にインジケーターが非表示になる仕組みです。
state = { animating: true }
closeActivityIndicator = () => setTimeout(() => this.setState({
animating: false }), 60000)
componentDidMount = () => this.closeActivityIndicator()
完全なサンプルコード(クラスコンポーネント)
import React, { Component } from 'react';
import { ActivityIndicator, View, StyleSheet } from 'react-native';
class ActivityIndicatorExample extends Component {
state = { animating: true }
closeActivityIndicator = () => setTimeout(() => this.setState({
animating: false }), 60000)
componentDidMount = () => this.closeActivityIndicator()
render() {
const animating = this.state.animating;
return (
<View style={styles.container}>
<ActivityIndicator
animating={animating}
color="#bc2b78"
size="large"
style={styles.activityIndicator} />
</View>
);
}
}
export default ActivityIndicatorExample;
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
marginTop: 70
},
activityIndicator: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
height: 80
}
});
関数コンポーネント+フックでの実装例
近年のReact Native開発では、関数コンポーネントとHooksを使った書き方が主流です。同じ挙動をuseStateとuseEffectで実装すると、より簡潔になります。
import React, { useState, useEffect } from 'react';
import { ActivityIndicator, View, StyleSheet } from 'react-native';
const ActivityIndicatorExample = () => {
const [animating, setAnimating] = useState(true);
useEffect(() => {
const timer = setTimeout(() => setAnimating(false), 60000);
return () => clearTimeout(timer); // クリーンアップでタイマーを解除
}, []);
return (
<View style={styles.container}>
<ActivityIndicator
animating={animating}
color="#bc2b78"
size="large"
style={styles.activityIndicator} />
</View>
);
};
export default ActivityIndicatorExample;
実際のアプリ開発では、APIリクエスト開始時にsetAnimating(true)、完了時にsetAnimating(false)を呼び出すことで、通信中のローディング表示として活用できます。
実行結果

-
React Navigation 5 を使って React Native のナビゲーションを処理する方法
React Nativeでナビゲーションを扱うときに真っ先に思い浮かぶライブラリといえば、React Navigationです。 筆者はこのライブラリの大ファンで、React Nativeのナビゲーション処理には常に最初の選択肢として採用しています。その理由の一つは、優れていて使いやすいAPIを備え、カスタマイズ性も非常に高いからです。 この記事を書くにあたったきっかけは、バージョン5がベータ版から安定版へと移行したことです。バージョン5にはいくつかの機能変更が加わり、ルートの宣言方法がシンプルかつ新しい設計のAPIへと生まれ変わりました。 本記事では、新しいAPIの概要と、アプリケーションで
-
React Nativeで動画を背景に使う方法をわかりやすく解説
この記事では、React Nativeで背景動画(backgroundVideo)を作成する方法を解説します。React Nativeを始めたばかりの方は、まず「React Nativeでモバイルアプリ開発を始めるために知っておくべきこと」といった入門記事を読んでおくと理解がスムーズになります。背景動画はアプリのUIに洗練された印象を与える演出手段です。広告の表示やユーザーへのメッセージ伝達など、さまざまな用途に活用できます。今回はPeletonアプリのホーム画面のようなデザインを目標に、実装方法を見ていきましょう。前提条件実装を始める前に、以下の環境が整っている必要があります。react-n