useStandaloneTimePicker

Zarządza stanem czasu z zachowaniem otwierania/zamykania i kliknięcia na zewnątrz.

Import

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

Użycie

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: "Select time",
});
return (
<div ref={picker.containerRef}>
<button onClick={picker.handleToggle}>
{picker.hasValue ? picker.displayValue : "Select time"}
</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>
{/* Hook up hour/minute controls */}
<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}>Clear</button>
<button onClick={picker.handleCancel}>Cancel</button>
<button onClick={picker.handleConfirm}>Confirm</button>
</div>
</div>
)}
</div>
);
}

Opcje

OpcjaTypDomyślnieOpis
valueDate | nullWymagane. Aktualny czas jako obiekt Date (używana jest tylko część czasowa).
onChange(date: Date | null) => voidWymagane. Wywoływane po zatwierdzeniu czasu.
timeTimeConfig{ precision: "minute", hourFormat: "24", minuteStep: 5, secondStep: 1 }Konfiguracja wyboru czasu.
localePartial<Locale>DEFAULT_LOCALEZastąp ciągi znaków lokalizacji.
displayFormatstringNiestandardowy ciąg formatujący dla wyświetlania w przycisku.
placeholderstringTekst zastępczy, gdy nie wybrano żadnej wartości.
openbooleanKontrolowany stan otwarcia.
initialOpenbooleanfalsePoczątkowy stan otwarcia (niekontrolowany).
onOpenChange(open: boolean) => voidCallback wywoływany przy zmianie stanu otwarcia.
requiredbooleanfalseGdy true, handleClear nie wykonuje żadnej operacji.
inlinebooleanfalseZawsze pokazuj panel bez przycisku/wyskakującego okienka.
namestringNazwa ukrytego pola wejściowego do przesyłania formularza.

Zwracane wartości

NazwaTypOpis
isOpenbooleanCzy wyskakujące okienko jest aktualnie otwarte.
handleOpen() => voidOtwórz wyskakujące okienko.
handleClose() => voidZamknij wyskakujące okienko.
handleToggle() => voidPrzełącz wyskakujące okienko.
tempHournumberAktualna tymczasowa wartość godziny.
tempMinutenumberAktualna tymczasowa wartość minuty.
tempSecondnumberAktualna tymczasowa wartość sekundy.
tempPeriodTimePeriodAktualny okres AM/PM.
handleHourChange(hour: number) => voidZaktualizuj tymczasową godzinę.
handleMinuteChange(minute: number) => voidZaktualizuj tymczasową minutę.
handleSecondChange(second: number) => voidZaktualizuj tymczasową sekundę.
handlePeriodChange(period: TimePeriod) => voidZaktualizuj okres AM/PM.
handleConfirm() => voidZatwierdź tymczasowy czas, wywołaj onChange i zamknij wyskakujące okienko.
handleCancel() => voidPrzywróć oryginalną wartość i zamknij wyskakujące okienko.
handleClear() => voidWyczyść wartość i zamknij. Nie wykonuje operacji, jeśli required.
displayValuestringSformatowany ciąg czasu dla przycisku (zatwierdzona wartość).
timeDisplayValuestringSformatowany ciąg czasu dla panelu (tymczasowa wartość).
hasValuebooleanCzy wartość czasu jest aktualnie ustawiona.
canConfirmbooleanCzy przycisk zatwierdzania powinien być włączony.
localeLocaleRozwiązany obiekt lokalizacji.
resolvedTimeConfigRequired<TimeConfig>W pełni rozwiązana konfiguracja czasu.
containerRefRefObject<HTMLDivElement | null>Ref dla zewnętrznego kontenera (używany do wykrywania kliknięcia na zewnątrz).
popupRefRefObject<HTMLDivElement | null>Ref dla elementu wyskakującego okienka (używany do wykrywania kliknięcia na zewnątrz).
handleKeyDown(e: KeyboardEvent) => voidObsługa klawiatury (Escape, aby anulować).

Kluczowe zachowania

Otwieranie/Zamykanie

Wyskakujące okienko może być kontrolowane lub niekontrolowane. Gdy podana jest właściwość open, hook używa jej jako źródła prawdy. W przeciwnym razie używany jest stan wewnętrzny z initialOpen jako wartością początkową.

Kliknięcie na zewnątrz

Kliknięcie poza zarówno containerRef, jak i popupRef wywołuje handleCancel, przywracając oryginalną wartość i zamykając wyskakujące okienko.

Klawiatura

Naciśnięcie klawisza Escape, gdy wyskakujące okienko jest otwarte, wywołuje handleCancel.

Tryb Inline

Gdy inline ma wartość true, panel jest zawsze widoczny, a zmiany są stosowane natychmiast (automatyczna synchronizacja). Logika otwierania/zamykania jest pomijana.

Wzorzec stanu tymczasowego

Ten hook utrzymuje stan tymczasowy, który jest zatwierdzany tylko po wywołaniu handleConfirm:

  • handleConfirm — zapisuje stan tymczasowy do onChange i zamyka wyskakujące okienko
  • handleCancel — przywraca stan tymczasowy do bieżącej wartości value i zamyka
  • handleClear — wywołuje onChange(null) i zamyka

Wyświetlane wartości

  • displayValue — sformatowany ciąg znaków zatwierdzonej wartości value (dla przycisku)
  • timeDisplayValue — sformatowany ciąg znaków wartości tymczasowych (dla panelu)