見出し画像

React Native の DateTimePicker の使い方

「React Native」の「DateTimePicker」の使い方をまとめました。


前回

1. DateTimePicker

「DateTimePicker」は、「React Native」アプリで日時選択UIを実装するためのライブラリです。

2. DateTimePicker の使い方

「DateTimePicker」の使い方は、次のとおりです。

2-1. React Nativeプロジェクトの作成

(1) React Nativeプロジェクトの作成。

npx react-native init my_app
cd my_app

(2) パッケージのインストール。

npm install @react-native-community/datetimepicker

2-2. iOSのセットアップ

(1) podのインストール。

cd ios
pod install
cd ..

(2) Xcodeで署名し、iPhoneにインストールできることを確認。

2-3. 日時選択UIの実装

(1) コードの編集。
「DateTimePicker」は、iOSは入力前の日時表示と入力UIが両方が含まれますが、Androidは入力UIのみのため、少し複雑になります。

・App.tsx

import React, { useState } from 'react';
import { TouchableOpacity, View, Text, Platform } from 'react-native';
import DateTimePicker from '@react-native-community/datetimepicker';

// アプリ
export default function App() {
  const [date, setDate] = useState(new Date());
  const [datePickerVisible, setDatePickerVisible] = useState<boolean>(Platform.OS === 'ios');
  const [timePickerVisible, setTimePickerVisible] = useState<boolean>(Platform.OS === 'ios');
  const timeOptions: Intl.DateTimeFormatOptions = {
    hour: '2-digit',
    minute: '2-digit',
  };

  // 年月日変更時に呼ばれる
  const onDateChange = (event: any, selectedDate: Date | undefined) => {
    const currentDate = selectedDate || date;
    setDatePickerVisible(Platform.OS === 'ios');
    setDate(currentDate);
  };

  // 時分変更時に呼ばれる
  const onTimeChange = (event: any, selectedDate: Date | undefined) => {
    const currentDate = selectedDate || date;
    setTimePickerVisible(Platform.OS === 'ios');
    setDate(currentDate);
  };  

  // UI
  return (
    <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
      { Platform.OS === 'android' &&
        <TouchableOpacity 
          onPress={() => {setDatePickerVisible(true)}} 
          style={{ borderWidth: 1, borderColor: '#000', padding: 10, marginBottom: 20, borderRadius: 5 }}
        >
          <Text style={{ fontSize: 16 }}>{date.toLocaleDateString()}</Text>
        </TouchableOpacity>
      }
      { Platform.OS === 'android' &&
          <TouchableOpacity 
            onPress={() => {setTimePickerVisible(true)}} 
            style={{ borderWidth: 1, borderColor: '#000', padding: 10, marginBottom: 20, borderRadius: 5 }}
          >
            <Text style={{ fontSize: 16 }}>{date.toLocaleTimeString('ja-JP', timeOptions)}</Text>
          </TouchableOpacity>
      }

      { datePickerVisible &&
        <DateTimePicker
          value={date}
          mode="date"
          is24Hour={true}
          display="default"
          onChange={onDateChange}
          locale="ja-JP"
          style={{marginBottom: 20}}
        />
      }
      { timePickerVisible &&
        <DateTimePicker
          value={date}
          mode="time"
          is24Hour={true}
          display="default"
          onChange={onTimeChange}
          locale="ja-JP"
          style={{marginBottom: 20}}
        />
      }

      <Text>{date.toLocaleDateString()} {date.toLocaleTimeString('ja-JP', timeOptions)}</Text>
    </View>
  );
};

(2) コードの実行。

npm start

次回



この記事が気に入ったらサポートをしてみませんか?