Headless
Le paquet headless (react-date-range-picker-headless) fournit des hooks et des fournisseurs de contexte sans style. Il contient toute la gestion d’état, la logique de calendrier, la navigation au clavier et les fonctionnalités d’accessibilité — mais zéro CSS, zéro opinion sur le balisage.
Vous apportez votre propre interface utilisateur.
Installation
npm install react-date-range-picker-headless
Quand utiliser Headless
- Vous avez un système de design avec sa propre bibliothèque de composants
- Vous voulez un contrôle au pixel près sur chaque élément
- Vous construisez un sélecteur de date personnalisé pour un cas d’utilisation spécifique
- Vous voulez intégrer un framework CSS non couvert par les paquets stylisés
Si vous voulez des composants stylisés prêts à l’emploi, consultez plutôt Styled, Tailwind v4, ou Tailwind v3.
Comment ça marche
- Choisissez un hook en fonction de votre cas d’utilisation
- Passez les options (value, onChange, config)
- Récupérez l’état et les gestionnaires
- Affichez votre propre interface utilisateur en utilisant les valeurs retournées
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> );}Hooks disponibles
| Hook | Cas d’utilisation |
|---|---|
useDatePicker | Sélection d’une seule date |
useDateRangePicker | Sélection d’une plage de dates avec deux calendriers |
useDateTimePicker | Sélection de la date et de l’heure |
useDateRangeTimePicker | Sélection de la plage de dates et de l’heure |
useTimePicker | Molette de défilement pour l’heure uniquement |
useStandaloneTimePicker | Sélecteur d’heure avec comportement d’ouverture/fermeture |
Prochaines étapes
- Construire une UI personnalisée — Guide complet du modèle headless
- Référence des Hooks — Documentation détaillée des hooks
- Contextes — Modèle de fournisseur pour les composants composés
- Utilitaires de date — Fonctions d’aide exportées depuis headless