useTimePicker

用于滚轮式时间选择器的底层钩子。管理基于滚动的时/分/秒选择,并带有吸附行为。此钩子通常在时间面板 UI 内部使用,但也可以直接用于自定义时间选择器的实现。

导入

import { useTimePicker } from "react-date-range-picker-headless";

用法

import { useState } from "react";
import { useTimePicker } from "react-date-range-picker-headless";
function MyTimePicker() {
const [hour, setHour] = useState(12);
const [minute, setMinute] = useState(0);
const picker = useTimePicker({
hour,
minute,
onHourChange: setHour,
onMinuteChange: setMinute,
precision: "minute",
hourFormat: "24",
minuteStep: 5,
});
return (
<div style={{ display: "flex", gap: 8 }}>
{/* 小时列 */}
<div
ref={picker.hourListRef}
onScroll={picker.handleHourScroll}
style={{ height: picker.itemHeight * 5, overflow: "auto" }}
>
{picker.hours.map((h) => (
<div
key={h}
onClick={() => picker.handleHourClick(h)}
style={{
height: picker.itemHeight,
fontWeight: h === hour ? "bold" : "normal",
}}
>
{String(h).padStart(2, "0")}
</div>
))}
</div>
{/* 分钟列 */}
{picker.showMinutes && (
<div
ref={picker.minuteListRef}
onScroll={picker.handleMinuteScroll}
style={{ height: picker.itemHeight * 5, overflow: "auto" }}
>
{picker.minutes.map((m) => (
<div
key={m}
onClick={() => picker.handleMinuteClick(m)}
style={{
height: picker.itemHeight,
fontWeight: m === minute ? "bold" : "normal",
}}
>
{String(m).padStart(2, "0")}
</div>
))}
</div>
)}
{/* 上下午切换 (12小时制) */}
{picker.is12Hour && <button onClick={picker.handlePeriodToggle}>{picker.period}</button>}
</div>
);
}

选项

选项类型默认值描述
hournumber必需。 当前小时。24小时制:0-23,12小时制:1-12。
minutenumber必需。 当前分钟。
secondnumber当前秒。
periodTimePeriod当前的 AM/PM 时段 (12小时制必需)。
onHourChange(hour: number) => void必需。 小时变化处理器。
onMinuteChange(minute: number) => void必需。 分钟变化处理器。
onSecondChange(second: number) => void秒变化处理器。
onPeriodChange(period: TimePeriod) => voidAM/PM 变化处理器。
precisionTimePrecision"minute"时间精度:"hour""minute""second"
hourFormatHourFormat"24""12""24" 小时格式。
minuteStepMinuteStep5分钟递增步长。
secondStepSecondStep1秒递增步长。

|