mcpField
S
syncfusion-react-timepicker

syncfusion-react-timepicker

github.com/syncfusion開発3167 回インストール1 週間前に更新
リポジトリ

syncfusion-react-timepicker について

Syncfusion TimePickerを実装するReact開発者向けのスキルです。設定や操作に加え、フォーム連携、検証、応用例を解説します。

主な機能

  1. 01複数の時刻形式とロケール
  2. 02選択可能な時刻範囲と間隔
  3. 03キーボード操作とイベント処理
  4. 04フォーム連携とマスク入力
  5. 05モバイル全画面表示とRTL対応

活用シーン

  1. 01予約フォームで選択時刻を制限
  2. 02ローカライズした時刻表示の設定
  3. 03選択イベントの処理と状態更新

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/syncfusion/react-ui-components-skills --skill syncfusion-react-timepicker

インストール後、Claude Code で/syncfusion-react-timepickerを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
advanced-patterns.md
api-reference.md
customization-and-styling.md
events-and-methods.md
getting-started.md
time-format-and-display.md
time-range-and-selection.md

詳細

Syncfusion React TimePicker コンポーネントの実装

Syncfusion React TimePicker コンポーネントを使うと、アプリケーションで時刻を簡単に選択できます。複数の時刻形式、時刻範囲の制約、キーボード操作、フォーム連携、モバイル向けに最適化された全画面モードに対応しています。

ドキュメントのナビゲーションガイド

はじめに

📄 参照: references/getting-started.md

  • npm によるインストール(@syncfusion/ej2-react-calendars)
  • app.module.ts での CalendarModule の設定
  • CSS のインポートとテーマの設定
  • TimePicker の基本的な実装
  • useRef を使ったコンポーネントの登録
  • 開発サーバーの起動
  • よくあるトラブルシューティング
時刻の形式と表示

📄 参照: references/time-format-and-display.md

  • 形式文字列のオプション(24 時間形式、12 時間形式)
  • skeleton プロパティを持つ TimeFormatObject
  • ロケールに基づく時刻形式
  • プレースホルダーテキストのカスタマイズ
  • フローティングラベルの種類(Never、Always、Auto)
  • DOM 属性用の htmlAttributes
  • enableMask によるマスク入力
  • マスクのプレースホルダー設定
時刻範囲と選択

📄 参照: references/time-range-and-selection.md

  • 時刻の最小値と最大値の制約
  • 時刻の間隔(15、30、60 分)
  • ScrollTo のデフォルト位置
  • 値のバインドと双方向更新
  • 読み取り専用状態と無効状態
  • OpenOnFocus の動作
  • 時刻ポップアップリストの生成
  • 時刻間隔の設定
イベントとメソッド

📄 参照: references/events-and-methods.md

  • イベントハンドラー(change、open、close、blur、focus)
  • イベント引数の構造
  • メソッド(show、hide、focusIn、focusOut)
  • useRef による命令型制御
  • ライフサイクルイベント(created、destroyed)
  • イベントのパターンとベストプラクティス
  • 値のクリアと状態のリセット
  • カスタム書式設定用の ItemRender
カスタマイズとスタイル設定

📄 参照: references/customization-and-styling.md

  • cssClass による CSS クラスのカスタマイズ
  • テーマのオプション(Material、Bootstrap、Fluent、Tailwind)
  • モバイルデバイス向けの全画面モード
  • RTL(右から左へ記述する言語)のサポート
  • Strict モードの検証
  • Z-index の管理
  • 幅と高さの設定
  • アクセシビリティ機能
  • Theme Studio との連携
API リファレンス

📄 参照: references/api-reference.md

  • プロパティの全一覧(26 個)
  • 署名付きの全メソッド(5 個)
  • イベント引数付きの全イベント(9 個)
  • 型定義とインターフェイス
  • デフォルト値と制約
  • 各プロパティの使用例
高度なパターン

📄 参照: references/advanced-patterns.md

  • 検証を伴うフォーム送信
  • キーボードショートカットと keyConfigs
  • サーバーのタイムゾーンオフセットの処理
  • localStorage による永続化
  • 複数コンポーネントの連携
  • パフォーマンスの最適化
  • エラー処理のパターン
  • 複雑な検証シナリオ

クイックスタート

import { TimePickerComponent } from '@syncfusion/ej2-react-calendars';
import * as React from 'react';
import '@syncfusion/ej2-base/styles/material3.css';
import '@syncfusion/ej2-calendars/styles/material3.css';

function App() {
  const [selectedTime, setSelectedTime] = React.useState(new Date('1/1/2018 9:00 AM'));

  const handleChange = (e: any) => {
    setSelectedTime(e.value);
  };

  return (
    <div style={{ padding: '20px' }}>
      <h2>Select Time</h2>
      <TimePickerComponent
        value={selectedTime}
        change={handleChange}
        placeholder="Select a time"
      />
      <p>Selected: {selectedTime ? selectedTime.toLocaleTimeString() : 'None'}</p>
    </div>
  );
}

export default App;

よくあるパターン

パターン 1:最小値と最大値の制約を設定した TimePicker
import { TimePickerComponent } from '@syncfusion/ej2-react-calendars';
import * as React from 'react';

function AppointmentScheduler() {
  const [appointmentTime, setAppointmentTime] = React.useState(new Date('1/1/2018 9:00 AM'));

  const minTime = new Date('1/1/2018 8:00 AM');
  const maxTime = new Date('1/1/2018 5:00 PM');

  return (
    <div>
      <h3>Select Appointment Time (8 AM - 5 PM)</h3>
      <TimePickerComponent
        value={appointmentTime}
        min={minTime}
        max={maxTime}
        step={30}
        change={(e: any) => setAppointmentTime(e.value)}
        placeholder="Choose time"
      />
    </div>
  );
}

export default AppointmentScheduler;
パターン 2:TimePicker の送信機能を備えたフォーム
import { TimePickerComponent } from '@syncfusion/ej2-react-calendars';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';

function ScheduleForm() {
  const [formData, setFormData] = React.useState({
    startTime: new Date('1/1/2018 9:00 AM'),
    endTime: new Date('1/1/2018 5:00 PM'),
  });

  const handleSubmit = (e: React.FormEvent) => {
    e.preventDefault();
    console.log('Schedule data:', {
      startTime: formData.startTime?.toLocaleTimeString(),
      endTime: formData.endTime?.toLocaleTimeString(),
    });
  };

  return (
    <form onSubmit={handleSubmit}>
      <h3>Schedule Meeting</h3>
      
      <label>Start Time:</label>
      <TimePickerComponent
        value={formData.startTime}
        change={(e: any) => setFormData(prev => ({ ...prev, startTime: e.value }))}
      />

      <label style={{ marginTop: '10px' }}>End Time:</label>
      <TimePickerComponent
        value={formData.endTime}
        min={formData.startTime}
        change={(e: any) => setFormData(prev => ({ ...prev, endTime: e.value }))}
      />

      <ButtonComponent type="submit" isPrimary={true} style={{ marginTop: '15px' }}>
        Schedule
      </ButtonComponent>
    </form>
  );
}

export default ScheduleForm;
パターン 3:カスタム形式の TimePicker
import { TimePickerComponent } from '@syncfusion/ej2-react-calendars';
import * as React from 'react';

function TimeFormatDemo() {
  const [time12hr, setTime12hr] = React.useState(new Date('1/1/2018 2:30 PM'));
  const [time24hr, setTime24hr] = React.useState(new Date('1/1/2018 14:30'));

  return (
    <div style={{ padding: '20px' }}>
      <div>
        <h4>12-Hour Format (hh:mm a)</h4>
        <TimePickerComponent
          value={time12hr}
          format="hh:mm a"
          change={(e: any) => setTime12hr(e.value)}
        />
        <p>Value: {time12hr?.toLocaleTimeString('en-US', { hour12: true })}</p>
      </div>

      <div style={{ marginTop: '20px' }}>
        <h4>24-Hour Format (HH:mm)</h4>
        <TimePickerComponent
          value={time24hr}
          format="HH:mm"
          change={(e: any) => setTime24hr(e.value)}
        />
        <p>Value: {time24hr?.toLocaleTimeString('en-US', { hour12: false })}</p>
      </div>
    </div>
  );
}

export default TimeFormatDemo;
パターン 4:イベント処理と状態管理
import { TimePickerComponent } from '@syncfusion/ej2-react-calendars';
import * as React from 'react';

function EventTrackingExample() {
  const [selectedTime, setSelectedTime] = React.useState<Date | null>(null);
  const [eventLog, setEventLog] = React.useState<string[]>([]);

  const handleChange = (e: any) => {
    setSelectedTime(e.value);
    setEventLog(prev => [...prev, `Changed: ${e.value?.toLocaleTimeString()}`]);
  };

  const handleOpen = (e: any) => {
    setEventLog(prev => [...prev, 'Popup opened']);
  };

  const handleClose = (e: any) => {
    setEventLog(prev => [...prev, 'Popup closed']);
  };

  return (
    <div style={{ padding: '20px' }}>
      <h3>Time Picker with Event Tracking</h3>
      <TimePickerComponent
        value={selectedTime}
        change={handleChange}
        open={handleOpen}
        close={handleClose}
        placeholder="Select time to track events"
      />

      <div style={{ marginTop: '20px', padding: '10px', border: '1px solid #ccc' }}>
        <h4>Event Log:</h4>
        <ul>
          {eventLog.map((event, idx) => (
            <li key={idx}>{event}</li>
          ))}
        </ul>
      </div>
    </div>
  );
}

export default EventTrackingExample;
パターン 5:マスク付き時刻入力
import { TimePickerComponent } from '@syncfusion/ej2-react-calendars';
import * as React from 'react';

function MaskedTimePickerExample() {
  const [maskedTime, setMaskedTime] = React.useState(new Date('1/1/2018 10:30 AM'));

  return (
    <div style={{ padding: '20px' }}>
      <h3>Masked Time Input</h3>
      <TimePickerComponent
        value={maskedTime}
        enableMask={true}
        format="hh:mm a"
        maskPlaceholder={{
          hour: 'HH',
          minute: 'MM',
          second: 'SS',
        }}
        change={(e: any) => setMaskedTime(e.value)}
        placeholder="Enter time (HH:MM AM/PM)"
      />
      <p>Masked input helps users enter time in correct format</p>
    </div>
  );
}

export default MaskedTimePickerExample;

主な Props のリファレンス

Prop型デフォルト値説明
valueDatenull現在選択されている時刻の値
formatstring文化に基づく時刻の表示形式(例:「HH:mm」、「hh:mm a」)
minDate00:00選択できる最小時刻
maxDate00:00選択できる最大時刻
stepnumber30リスト項目間の時刻間隔(分)
enabledbooleantrueコンポーネントを有効化/無効化します
readonlybooleanfalse読み取り専用の状態(編集不可)
placeholderstring-入力欄のプレースホルダーテキスト
openOnFocusbooleanfalse入力欄にフォーカスしたときにポップアップを開きます
enableMaskbooleanfalseマスク入力モードを有効にします
enableRtlbooleanfalse右から左へのレイアウトを有効にします
strictModebooleanfalse入力を検証し、有効な時刻に制限します
showClearButtonbooleantrueクリアボタンを表示/非表示にします
fullScreenModebooleanfalseモバイルの全画面モード
cssClassstring-スタイリング用のカスタム CSS クラス
floatLabelTypestringNeverフローティングラベルの位置
allowEditbooleantrue手動での入力編集を許可します
localestring'en-US'時刻の書式設定に使用するロケール
scrollToDate-ポップアップのデフォルトのスクロール位置
widthstring/number-コンポーネントの幅
zIndexnumber1000ポップアップの Z-index
serverTimezoneOffsetnumber-処理に使用するサーバーのタイムゾーンオフセット
htmlAttributesobject{}カスタム HTML 属性

関連スキル


次のステップ:

コメント