React Nativeでドロップダウン形式の選択UIを実装するには、
@react-native-picker/picker がよく使われます。Android、iOS、Windows、macOSに対応し、設定やカスタマイズの選択肢が豊富です。
この記事では、インストール、環境別の設定、Pickerの実装までを順に説明します。
まず、次のいずれかのコマンドでライブラリをインストールします。
npm install @react-native-picker/picker --save
# 또는
yarn add @react-native-picker/picker
iOSではCocoaPodsの設定が必要です。次のコマンドを実行してください。
Androidでは追加設定なしで使えます。ただし、RTL(右から左)の表示に対応する場合は、
AndroidManifest.xml に次の項目を追加できます。
アラビア語など、右から左へ描画するアプリでは、この設定が必要です。
<application
android:supportsRtl="true"
...>
Pickerコンポーネントを使ってみましょう。次はTypeScriptでの簡単な例です。
import React, { useRef, useState } from "react";
import { Picker } from "@react-native-picker/picker";
const App = () => {
const pickerRef = useRef<any>();
const [selected, setSelected] = useState<string>();
return (
<Picker
ref={pickerRef}
selectedValue={selected}
onValueChange={(itemValue) => setSelected(itemValue)}
>
<Picker.Item label="Java" value="java" />
<Picker.Item label="JavaScript" value="js" />
<Picker.Item label="Python" value="python" />
<Picker.Item label="C#" value="c#" />
</Picker>
);
};
export default App;
このような短いコードで使えます。選択済みの値は selectedValue で指定し、変更は onValueChange で検知できます。
Androidでは、コードでPickerを開いたり閉じたりできます。次は useRef を使う例です。
import React, { useRef, useState } from "react";
import { Picker } from "@react-native-picker/picker";
import { Button } from "react-native";
const App = () => {
const pickerRef = useRef<any>();
const [selected, setSelected] = useState<string>();
const open = () => pickerRef.current?.focus();
const close = () => pickerRef.current?.blur();
return (
<>
<Picker
ref={pickerRef}
selectedValue={selected}
onValueChange={(itemValue) => setSelected(itemValue)}
>
<Picker.Item label="Java" value="java" />
<Picker.Item label="JavaScript" value="js" />
</Picker>
<Button title="Open" onPress={open} />
<Button title="Close" onPress={close} />
</>
);
};
export default App;
各 Picker.Item には label、value、enabled、color などを指定でき、見た目やアクセシビリティを調整できます。
| プロパティ | 説明 | プラットフォーム |
|---|
| selectedValue | 選択済みの値 | すべて |
|---|
| onValueChange | 値の変更イベント | すべて |
|---|
| mode | 'dialog' または 'dropdown'(Androidのみ) | Android |
|---|
| itemStyle | 項目のスタイル | iOS、Windows |
|---|
| enabled | 選択を有効にするか | Android、Web、Windows |
|---|
| dropdownIconColor | ドロップダウンの矢印の色 | Android |
|---|
| selectionColor | 選択テキストの色 | iOS |
|---|
このほか、テスト用の testID、アクセシビリティ用の contentDescription、スタイル用の style、行数を制限する numberOfLines なども使えます。
@react-native-picker/picker はプラットフォームごとの標準UIに従うので、
iOSではダイアログ
として表示されます。デザイン上、ドロップダウンが必須なら、
@react-native-picker/picker では目的の表示を実現できないことがあります。
その場合は
react-native-element-dropdown↗を使うと、iOSとAndroidで同じ見た目のドロップダウンを実装できます。
react-native-element-dropdownのインストールと使い方 🔗
npm install react-native-element-dropdown
# 또는
yarn add react-native-element-dropdown
追加設定は不要です。インストール後すぐ使えます。
以下は基本的な例です。
import React, { useState } from 'react';
import { View, StyleSheet } from 'react-native';
import { Dropdown } from 'react-native-element-dropdown';
const data = [
{ label: 'Java', value: 'java' },
{ label: 'JavaScript', value: 'js' },
{ label: 'Python', value: 'python' },
{ label: 'C#', value: 'c#' },
];
const App = () => {
const [value, setValue] = useState(null);
return (
<View style={styles.container}>
<Dropdown
style={styles.dropdown}
placeholderStyle={styles.placeholderStyle} // 빈 상태의 텍스트 스타일
selectedTextStyle={styles.selectedTextStyle} // 선택된 텍스트 스타일
data={data} // 표시할 데이터
labelField="label" // 표시할 데이터의 레이블 필드
valueField="value" // 표시할 데이터의 값 필드
placeholder="언어 선택" // 빈 상태의 텍스트
value={value} // 선택된 값
onChange={(item) => {
setValue(item.value); // 선택된 값 업데이트
}}
/>
</View>
);
};
const styles = StyleSheet.create({
container: { padding: 16 },
dropdown: {
height: 50,
borderColor: '#ccc',
borderWidth: 1,
borderRadius: 8,
paddingHorizontal: 12,
},
placeholderStyle: {
fontSize: 16,
color: '#999',
},
selectedTextStyle: {
fontSize: 16,
color: '#333',
},
});
export default App;

このライブラリでは labelField と valueField で表示するデータを指定できます。スタイル設定の自由度が高く、デザインを調整しやすい点も特徴です。
| ライブラリ | iOSでの表示 | Androidでの表示 | 特徴 |
|---|
@react-native-picker/picker | ダイアログ | ドロップダウン/ダイアログ | ネイティブに近い操作感と高い安定性 |
|---|
react-native-element-dropdown | ドロップダウン | ドロップダウン | OS間で表示がそろい、カスタマイズしやすい |
|---|
簡単なネイティブの選択UI
が必要で、iOSではダイアログでよい
なら、@react-native-picker/picker が向いています。
iOSでもドロップダウンが必要
なら、react-native-element-dropdown を検討しましょう。
@react-native-picker/picker は、React Nativeで複数のプラットフォームに対応する選択UIを実装できる便利なライブラリです。インストールが簡単で設定も豊富なので、初めてでも使いやすく、必要に応じて応用機能を追加できます。