Context’ler

headless paketi, hook’ları saran ve durumlarını React Context aracılığıyla ortaya çıkaran Context sağlayıcıları sunar. Bu, bileşik bileşen desenini (compound component pattern) mümkün kılar — kullanıcı arayüzünüzü, state’i context’ten okuyan ve prop’ları aşağıya geçirmek yerine küçük, odaklanmış alt bileşenlere ayırın.

Neden Context’ler?

Context olmadan, her bir state parçasını prop’lar aracılığıyla iletmeniz gerekirdi:

// Context olmadan -- prop drilling
function MyDatePicker() {
const picker = useDatePicker({ value, onChange });
return (
<MyTrigger displayValue={picker.displayValue} onToggle={picker.handleToggle} />
<MyCalendar calendar={picker.calendar} getDayProps={picker.getDayProps} ... />
<MyFooter onConfirm={picker.handleConfirm} onCancel={picker.handleCancel} ... />
);
}

Context ile alt bileşenler, ihtiyaç duydukları şeyi doğrudan tüketir:

// Context ile -- bileşik bileşenler
function MyDatePicker() {
return (
<DatePickerProvider value={value} onChange={onChange}>
<ExampleWrapper variant="headless" client:visible>
<MyTrigger client:visible />
</ExampleWrapper>
<ExampleWrapper variant="headless" client:visible>
<MyCalendar client:visible />
</ExampleWrapper>
<ExampleWrapper variant="headless" client:visible>
<MyFooter client:visible />
</ExampleWrapper>
</DatePickerProvider>
);
}
function MyTrigger() {
const { displayValue, handleToggle } = useDatePickerContext();
return <button onClick={handleToggle}>{displayValue}</button>;
}

Mevcut Sağlayıcılar

SağlayıcıDahili Olarak Kullanılan HookTüketici Hook’u
DatePickerProvideruseDatePickeruseDatePickerContext()
DateRangePickerProvideruseDateRangePickeruseDateRangePickerContext()
DateTimePickerProvideruseDateTimePickeruseDateTimePickerContext()
DateRangeTimePickerProvideruseDateRangeTimePickeruseDateRangeTimePickerContext()

Her sağlayıcı hem türlenmiş bir context (o seçici türüne özgü) hem de birleştirilmiş PickerContext (tüm türlerde paylaşılan) render eder.

import {
DatePickerProvider,
DateRangePickerProvider,
DateTimePickerProvider,
DateRangeTimePickerProvider,
} from "react-date-range-picker-headless";

DatePickerProvider

useDatePicker hook’unu sarar. DatePickerContext + PickerContext sağlar.

import type { DatePickerProviderProps } from "react-date-range-picker-headless";
PropTürAçıklama
childrenReactNodeGerekli. Alt bileşenler.
valueDate | nullGerekli. Mevcut tarih.
onChange(date: Date | null) => voidGerekli. Değişiklik işleyicisi.
inlinebooleanSatır içi render et (açılır pencere yok).
sizeDatePickerSizeBoyut varyantı.
placeholderstringTetikleyici yer tutucusu.
namestringForm alanı adı.
…restBaseDatePickerOptionsTüm temel seçenekler (minDate, maxDate, locale, vb.).

Tüketici hook’u: useDatePickerContext() UseDatePickerReturn döndürür.

DateRangePickerProvider

useDateRangePicker hook’unu sarar. DateRangePickerContext + PickerContext sağlar.

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