Headless

Headless paket (react-date-range-picker-headless) stilsiz hook’lar ve context provider’lar sağlar. Tüm durum yönetimi, takvim mantığı, klavye navigasyonu ve erişilebilirlik özelliklerini içerir — ancak sıfır CSS, sıfır işaretleme dayatması sunar.

Kendi kullanıcı arayüzünüzü siz getirirsiniz.

Kurulum

npm install react-date-range-picker-headless

Headless Ne Zaman Kullanılır?

  • Kendi bileşen kütüphanesine sahip bir tasarım sisteminiz varsa
  • Her öğe üzerinde piksel düzeyinde mükemmel kontrol istiyorsanız
  • Belirli bir kullanım durumu için özel bir tarih seçici oluşturuyorsanız
  • Stilli paketler tarafından kapsanmayan bir CSS çatısı ile entegre olmak istiyorsanız

Kullanıma hazır stilli bileşenler istiyorsanız, bunun yerine Styled, Tailwind v4 veya Tailwind v3 belgelerine bakın.

Nasıl Çalışır?

  1. Kullanım durumunuza göre bir hook seçin
  2. Seçenekleri (value, onChange, config) geçin
  3. Durum (state) ve işleyicileri (handler) geri alın
  4. Geri dönen değerleri kullanarak kendi kullanıcı arayüzünüzü oluşturun
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>
);
}

Mevcut Hook’lar

HookKullanım Alanı
useDatePickerTek tarih seçimi
useDateRangePickerÇift takvimli tarih aralığı seçimi
useDateTimePickerTarih + saat seçimi
useDateRangeTimePickerTarih aralığı + saat seçimi
useTimePickerYalnızca saat için kaydırma tekerleği
useStandaloneTimePickerAçma/kapama davranışına sahip saat seçici

Sonraki Adımlar