Headless
แพ็คเกจ headless (react-date-range-picker-headless) มี hooks และ context providers ที่ไม่มีสไตล์มาให้ มันมีการจัดการ state, ตรรกะของปฏิทิน, การนำทางด้วยคีย์บอร์ด, และฟีเจอร์การเข้าถึงทั้งหมด — แต่ไม่มี CSS และไม่มีความคิดเห็นเกี่ยวกับมาร์กอัป
คุณนำ UI ของคุณมาเอง
การติดตั้ง
npm install react-date-range-picker-headless
เมื่อใดที่ควรใช้ Headless
- คุณมีระบบการออกแบบ (design system) พร้อมไลบรารีคอมโพเนนต์ของตัวเอง
- คุณต้องการควบคุมทุกองค์ประกอบได้อย่างสมบูรณ์แบบ (pixel-perfect)
- คุณกำลังสร้างตัวเลือกวันที่แบบกำหนดเองสำหรับกรณีการใช้งานเฉพาะ
- คุณต้องการผสานรวมกับ CSS framework ที่ไม่มีในแพ็คเกจที่จัดสไตล์ไว้ให้
หากคุณต้องการคอมโพเนนต์ที่จัดสไตล์พร้อมใช้งาน โปรดดูที่ Styled, Tailwind v4, หรือ Tailwind v3 แทน
มันทำงานอย่างไร
- เลือก hook ตามกรณีการใช้งานของคุณ
- ส่ง options (value, onChange, config)
- รับ state และ handlers กลับมา
- แสดงผล UI ของคุณเองโดยใช้ค่าที่ได้กลับมา
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 ที่มีให้ใช้งาน
| Hook | กรณีการใช้งาน |
|---|---|
useDatePicker | การเลือกวันที่เดียว |
useDateRangePicker | การเลือกช่วงวันที่พร้อมปฏิทินคู่ |
useDateTimePicker | การเลือกวันที่ + เวลา |
useDateRangeTimePicker | การเลือกช่วงวันที่ + เวลา |
useTimePicker | วงล้อเลื่อนสำหรับเวลาเท่านั้น |
useStandaloneTimePicker | ตัวเลือกเวลาที่มีพฤติกรรมการเปิด/ปิด |
ขั้นตอนถัดไป
- การสร้าง UI แบบกำหนดเอง — คำแนะนำฉบับเต็มเกี่ยวกับรูปแบบ headless
- ข้อมูลอ้างอิง Hooks — เอกสาร hook โดยละเอียด
- Contexts — รูปแบบ Provider สำหรับคอมโพเนนต์แบบผสม
- ยูทิลิตี้เกี่ยวกับวันที่ — ฟังก์ชันช่วยเหลือที่ส่งออกจาก headless