mcpField
S
syncfusion-react-timepicker

syncfusion-react-timepicker

github.com/syncfusion开发3167 次安装1 周前更新
代码仓库

关于 syncfusion-react-timepicker

面向 React 开发者的 Syncfusion TimePicker 组件技能,涵盖配置、交互与集成方法。文档还提供表单、校验和进阶场景的实现指引。

主要功能

  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(从右到左)语言支持
  • 严格模式验证
  • 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;

核心属性参考

属性类型默认值用途
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 属性

相关技能


后续步骤:

评论

支持 Markdown