Headless
Das Headless-Paket (react-date-range-picker-headless) stellt ungestylte Hooks und Context-Provider zur Verfügung. Es enthält die gesamte Zustandsverwaltung, Kalenderlogik, Tastaturnavigation und Barrierefreiheitsfunktionen – aber null CSS, null Markup-Meinungen.
Sie bringen Ihre eigene Benutzeroberfläche mit.
Installation
npm install react-date-range-picker-headless
Wann Sie Headless verwenden sollten
- Sie haben ein Design-System mit einer eigenen Komponentenbibliothek
- Sie möchten pixelgenaue Kontrolle über jedes Element
- Sie erstellen einen benutzerdefinierten Datumswähler für einen speziellen Anwendungsfall
- Sie möchten eine Integration mit einem CSS-Framework, das nicht von den Styled-Paketen abgedeckt wird
Wenn Sie sofort einsatzbereite, gestylte Komponenten wünschen, sehen Sie sich stattdessen Styled, Tailwind v4 oder Tailwind v3 an.
Wie es funktioniert
- Wählen Sie einen Hook basierend auf Ihrem Anwendungsfall
- Übergeben Sie Optionen (Wert, onChange, Konfiguration)
- Erhalten Sie Zustand und Handler zurück
- Rendern Sie Ihre eigene Benutzeroberfläche mit den zurückgegebenen Werten
import { useState } from "react";import { useDatePicker } from "react-date-range-picker-headless";function MyDatePicker() { const [value, setValue] = useState<Date | null>(null);
const { isOpen, calendar, getDayProps, displayValue, handleToggle, handleDateClick, handleConfirm, handlePrevMonth, handleNextMonth, locale, } = useDatePicker({ value, onChange: setValue });
return ( <div> <button onClick={handleToggle}>{displayValue || locale.placeholder}</button> {isOpen && ( <div> <div> <button onClick={handlePrevMonth}>{locale.prevMonth}</button> <span>{locale.formatMonthYear(calendar.month)}</span> <button onClick={handleNextMonth}>{locale.nextMonth}</button> </div> <div style={{ display: "grid", gridTemplateColumns: "repeat(7, 1fr)" }}> {calendar.weeks.flat().map((day, i) => { if (!day) return <span key={i} />; const props = getDayProps(day); return ( <button key={i} onClick={() => handleDateClick(day)} style={{ background: props.isSelected ? "#0ea5e9" : "transparent", color: props.isDisabled ? "#ccc" : props.isToday ? "#0ea5e9" : "inherit", }} > {props.day} </button> ); })} </div> <button onClick={handleConfirm}>{locale.confirm}</button> </div> )} </div> );}