useStandaloneTimePicker

Quản lý trạng thái thời gian với hành vi mở/đóng và nhấp chuột bên ngoài.

Nhập

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

Cách sử dụng

import { useState } from "react";
import { useStandaloneTimePicker } from "react-date-range-picker-headless";
function MyTimePicker() {
const [time, setTime] = useState<Date | null>(null);
const picker = useStandaloneTimePicker({
value: time,
onChange: setTime,
time: { precision: "minute", hourFormat: "24", minuteStep: 5 },
placeholder: "Chọn thời gian",
});
return (
<div ref={picker.containerRef}>
<button onClick={picker.handleToggle}>
{picker.hasValue ? picker.displayValue : "Chọn thời gian"}
</button>
{picker.isOpen && (
<div ref={picker.popupRef} onKeyDown={picker.handleKeyDown}>
<div>
<span>{String(picker.tempHour).padStart(2, "0")}</span>
<span>:</span>
<span>{String(picker.tempMinute).padStart(2, "0")}</span>
</div>
{/* Kết nối các điều khiển giờ/phút */}
<input
type="range"
min={0}
max={23}
value={picker.tempHour}
onChange={(e) => picker.handleHourChange(Number(e.target.value))}
/>
<input
type="range"
min={0}
max={55}
step={5}
value={picker.tempMinute}
onChange={(e) => picker.handleMinuteChange(Number(e.target.value))}
/>
<div>
<button onClick={picker.handleClear}>Xóa</button>
<button onClick={picker.handleCancel}>Hủy</button>
<button onClick={picker.handleConfirm}>Xác nhận</button>
</div>
</div>
)}
</div>
);
}

Tùy chọn

Tùy chọnKiểuMặc địnhMô tả
valueDate | nullBắt buộc. Thời gian hiện tại dưới dạng đối tượng Date (chỉ sử dụng phần thời gian).
onChange(date: Date | null) => voidBắt buộc. Được gọi khi thời gian được xác nhận.
timeTimeConfig{ precision: "minute", hourFormat: "24", minuteStep: 5, secondStep: 1 }Cấu hình bộ chọn thời gian.
localePartial<Locale>DEFAULT_LOCALEGhi đè các chuỗi bản địa hóa.
displayFormatstringChuỗi định dạng tùy chỉnh cho hiển thị của trình kích hoạt.
placeholderstringVăn bản giữ chỗ khi không có giá trị nào được chọn.
openbooleanTrạng thái mở được kiểm soát.
initialOpenbooleanfalseTrạng thái mở ban đầu (không được kiểm soát).
onOpenChange(open: boolean) => voidCallback khi trạng thái mở thay đổi.
requiredbooleanfalseKhi là true, handleClear không thực hiện hành động nào.
inlinebooleanfalseLuôn hiển thị bảng điều khiển mà không có trình kích hoạt/cửa sổ bật lên.
namestringTên input ẩn để gửi biểu mẫu.

Giá trị trả về

TênKiểuMô tả
isOpenbooleanLiệu cửa sổ bật lên có đang mở hay không.
handleOpen() => voidMở cửa sổ bật lên.
handleClose() => voidĐóng cửa sổ bật lên.
handleToggle() => voidBật/tắt cửa sổ bật lên.
tempHournumberGiá trị giờ tạm thời hiện tại.
tempMinutenumberGiá trị phút tạm thời hiện tại.
tempSecondnumberGiá trị giây tạm thời hiện tại.
tempPeriodTimePeriodKhoảng thời gian AM/PM hiện tại.
handleHourChange(hour: number) => voidCập nhật giờ tạm thời.
handleMinuteChange(minute: number) => voidCập nhật phút tạm thời.
handleSecondChange(second: number) => voidCập nhật giây tạm thời.
handlePeriodChange(period: TimePeriod) => voidCập nhật khoảng thời gian AM/PM.
handleConfirm() => voidXác nhận thời gian tạm thời, gọi onChange, và đóng cửa sổ bật lên.
handleCancel() => voidHoàn nguyên về giá trị ban đầu và đóng cửa sổ bật lên.
handleClear() => voidXóa giá trị và đóng. Không thực hiện hành động nào nếu required.
displayValuestringChuỗi thời gian đã định dạng cho trình kích hoạt (giá trị đã xác nhận).
timeDisplayValuestringChuỗi thời gian đã định dạng cho bảng điều khiển (giá trị tạm thời).
hasValuebooleanLiệu một giá trị thời gian có đang được thiết lập hay không.
canConfirmbooleanLiệu nút xác nhận có nên được bật hay không.
localeLocaleĐối tượng bản địa hóa đã được giải quyết.
resolvedTimeConfigRequired<TimeConfig>Cấu hình thời gian đã được giải quyết hoàn toàn.
containerRefRefObject<HTMLDivElement | null>Ref cho vùng chứa bên ngoài (dùng để phát hiện nhấp chuột bên ngoài).
popupRefRefObject<HTMLDivElement | null>Ref cho phần tử cửa sổ bật lên (dùng để phát hiện nhấp chuột bên ngoài).
handleKeyDown(e: KeyboardEvent) => voidTrình xử lý bàn phím (Escape để hủy).

Các hành vi chính

Mở/Đóng

Cửa sổ bật lên có thể được kiểm soát hoặc không được kiểm soát. Khi open được cung cấp, hook sẽ sử dụng nó làm nguồn đáng tin cậy. Nếu không, trạng thái nội bộ sẽ được sử dụng với initialOpen làm giá trị bắt đầu.

Nhấp chuột bên ngoài

Nhấp chuột bên ngoài cả containerRefpopupRef sẽ kích hoạt handleCancel, hoàn nguyên về giá trị ban đầu và đóng cửa sổ bật lên.

Bàn phím

Nhấn Escape trong khi cửa sổ bật lên đang mở sẽ kích hoạt handleCancel.

Chế độ nội tuyến

Khi inlinetrue, bảng điều khiển luôn hiển thị và các thay đổi được áp dụng ngay lập tức (tự động đồng bộ hóa). Logic mở/đóng bị bỏ qua.

Mẫu trạng thái tạm thời

Hook này duy trì trạng thái tạm thời chỉ được xác nhận khi handleConfirm được gọi:

  • handleConfirm — ghi trạng thái tạm thời vào onChange và đóng cửa sổ bật lên
  • handleCancel — hoàn nguyên trạng thái tạm thời về value hiện tại và đóng
  • handleClear — gọi onChange(null) và đóng

Giá trị hiển thị

  • displayValue — chuỗi đã định dạng của value đã xác nhận (dành cho trình kích hoạt)
  • timeDisplayValue — chuỗi đã định dạng của các giá trị tạm thời (dành cho bảng điều khiển)