React NativeのModal(モーダル)コンポーネントの使い方と動作を徹底解説
React NativeのModalコンポーネントは、既存のUIコンテンツの上に別のビューを重ねて表示するための機能です。ダイアログや確認画面、入力フォームなど、ユーザーの注意を引きたい場面でよく使われます。
Modalコンポーネントの基本形
Modalコンポーネントの最もシンプルな記述例は以下の通りです。
<Modal animationType="slide" transparent={true} visible={modalVisible} onRequestClose={() => { Alert.alert("モーダルが閉じられました"); }}> ここにコンテンツを記述</Modal>Modalを使用するには、まずreact-nativeからインポートします。
import { Modal } from "react-native";Modalウィンドウの主なプロパティ
Modalウィンドウで利用できる基本プロパティは以下の通りです。
| No. | プロパティと説明 |
|---|---|
| 1 | animationType モーダルウィンドウを表示するときのアニメーションを制御するプロパティです。「slide」「fade」「none」の3つの値を持つenum型で指定します。 |
| 2 | onDismiss モーダルウィンドウが閉じられたときに呼び出される関数を受け取るプロパティです。 |
| 3 | onOrientationChange モーダルウィンドウが表示されている間にデバイスの向きが変わったときに呼び出されるコールバック関数です。 |
| 4 | onShow モーダルウィンドウが表示されたときに呼び出される関数をpropとして渡します。 |
| 5 | presentationStyle モーダルウィンドウの表示形式を制御するプロパティです。「fullScreen」「pageSheet」「formSheet」「overFullScreen」の4種類が選択できます。 |
| 6 | transparent モーダルウィンドウの背景を透過表示にするか、画面全体を塗りつぶすかを決めるプロパティです。 |
| 7 | visible モーダルウィンドウを表示するかどうか(true / false)を決めるプロパティです。 |
実践例:モーダルウィンドウの表示・非表示を切り替える
ここでは、実際にModalコンポーネントを使って、ボタン操作でモーダルを開閉するサンプルを紹介します。
まずはModalをインポートします。
import { Modal } from "react-native";モーダルを表示する際には、animationTypeでアニメーションの種類を選べます。選択肢は「slide」「fade」「none」の3つです。以下の例では、テキストとボタンを含むシンプルなモーダルウィンドウをスライド表示しています。
<Modal
animationType="slide"
transparent={true}
visible={isVisible}
>
<View style={styles.centeredView}>
<View style={styles.myModal}>
<Text style={styles.modalText}>モーダル表示テスト!</Text>
<Button style={styles.modalButton} title="閉じる" onPress={() => {setModalVisiblility(false); }}/>
</View>
</View>
</Modal>状態管理にはuseStateを使用
isVisible変数がvisibleプロパティに渡されます。初期値はfalseなので、デフォルトではモーダルウィンドウは表示されません。isVisibleは次のように初期化します。
const [isVisible, setModalVisiblility] = useState(false);
setModalVisiblilityを呼び出すことで、isVisible変数をtrue⇔falseで更新できます。
Modal内に配置した「閉じる」ボタンはsetModalVisiblility(false)を呼び出し、isVisibleがfalseになることでモーダルウィンドウが非表示になります。
一方、モーダルを表示するためには、<Modal>の外側にある「Click Me」ボタンでsetModalVisiblility(true)を呼び出します。
<View style={styles.centeredView}>
<Modal
animationType="slide"
transparent={true}
visible={isVisible}
>
<View style={styles.centeredView}>
<View style={styles.myModal}>
<Text style={styles.modalText}>モーダル表示テスト!</Text>
<Button style={styles.modalButton} title="閉じる" onPress={() =>{setModalVisiblility(false); }}/>
</View>
</View>
</Modal>
<Button title="クリックしてね" onPress={() => {
setModalVisiblility(true);
}}
/>
</View>完成版サンプルコード
以下が、モーダルウィンドウの表示/非表示を切り替える完全な動作コードです。
import React, { useState } from "react";
import { Button, Alert, Modal, StyleSheet, Text, View } from "react-native";
const App = () => {
const [isVisible, setModalVisiblility] = useState(false);
return (
<View style={styles.centeredView}>
<Modal
animationType="slide"
transparent={true}
visible={isVisible}
>
<View style={styles.centeredView}>
<View style={styles.myModal}>
<Text style={styles.modalText}>モーダル表示テスト!</Text>
<Button style={styles.modalButton} title="閉じる" onPress={() =>{setModalVisiblility(false); }}/>
</View>
</View>
</Modal>
<Button title="クリックしてね" onPress={() => {
setModalVisiblility(true);
}}
/>
</View>
);
};
const styles = StyleSheet.create({
centeredView: {
flex: 1,
justifyContent: "center",
alignItems: "center",
marginTop: 22
},
myModal: {
width:200,
height:200,
margin: 20,
backgroundColor: "white",
borderRadius: 20,
padding: 35,
alignItems: "center",
shadowColor: "#000",
shadowOffset: {
width: 0,
height: 2
},
shadowOpacity: 0.30,
shadowRadius: 4,
elevation: 5
},
modalText: {
marginBottom: 20,
textAlign: "center"
},
modalButton: {
marginBottom: 50,
}
});
export default App;実行結果
このコードを実行すると、「クリックしてね」ボタンをタップすると下からスライドしながら白いモーダルウィンドウが表示され、モーダル内の「閉じる」ボタンを押すと再び非表示になる動作が確認できます。

-
React Nativeでマテリアルデザインのチップ(Chip)を表示する方法を徹底解説
UIにチップ(Chip)を表示するには、React Native Paperが提供するマテリアルデザインコンポーネントを利用します。React Native Paperは、Googleのマテリアルデザインガイドラインに沿ったUIパーツを簡単に導入できる人気のライブラリです。React Native Paperのインストールまず、以下のコマンドでreact-native-paperをプロジェクトにインストールします。npm install --save-dev react-native-paperインストール後、チップコンポーネントは画面上で次のように表示されます。チップコンポーネントの基本構文
-
【初心者向け】React Nativeのアニメーション徹底解説!Animated APIとLayoutAnimationの使い方
React Nativeには、コンポーネントにインタラクティブ性を持たせるためのアニメーション機能が標準で用意されています。アニメーションは、View、Text、Image、ScrollView、FlatList、SectionListなど、主要なコンポーネントに対して適用できます。React Nativeが提供するアニメーションの種類は主に以下の2つです。Animated APILayoutAnimationAnimated APIとはAnimated APIは、入力値から出力値への時間ベースのアニメーションを実現するためのAPIです。ここでは、Animated.timing()を使ってボッ