Calendar
カレンダー。単一の日付・期間・複数日のいずれでも選べる
<Calendar mode="single" selected={date} onSelect={setDate} />言語は渡してください
月名・曜日名・週の開始は言語で変わります。既定を持っていません—— 書体名と同じで、ブランドの選択だからです。
import { ja } from 'react-day-picker/locale';
<Calendar locale={ja} />渡さなければ英語になります。
react-day-picker の CSS は読み込みません
このコンポーネントは react-day-picker に乗っていますが、そちらの CSS は読み込みません。
持っている値がこのスケールの外にあるためです。
あなたも読み込まないでください。 読み込むとサイズと色が二重になります。
import 'react-day-picker/style.css'; {/* 要りません */}選び方は mode で決まります
mode | 選べるもの |
|---|---|
single | 1日 |
range | 範囲 |
multiple | 飛び飛びの複数日 |
selected と onSelect の型は mode に連動します。
範囲のつもりで1日を渡すと型で落ちます。
<Calendar mode="range" selected={range} onSelect={setRange} />範囲は端と中で濃さが違います
端は濃く、あいだは淡く塗ります。同じ濃さにすると、端がどこか読めません。
端は外側だけ丸めるので、中と繋がって1本に見えます。
選べない日は暗くなります
disabled に渡した日は押せなくなります。
<Calendar mode="single" disabled={{ dayOfWeek: [0, 6] }} />押せるように見えて何も起きないものを作りません。
依存が3つインストールされます
Calendar を追加すると、react-day-picker と date-fns と @date-fns/tz も
一緒にインストールされます。Calendar を使うときだけです。
単一の日付だけなら自分で書ける規模ですが、範囲まで持つと 日付のマス目の中でのフォーカス移動・選択の申告・月を移ったときの読み上げが 一気に増えます。 そこを引き受けてもらうための依存です。
3つの状態
通常・空・エッジケースの3つは、どのコンポーネントにも必ずあります。
通常default.tsx
通常。1日を選ぶ。
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
|---|---|---|---|---|---|---|
空empty.tsx
空。何も選ばれていないとき。
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
|---|---|---|---|---|---|---|
エッジケースedge.tsx
エッジケース。範囲・複数月・選べない日。
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
|---|---|---|---|---|---|---|
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
|---|---|---|---|---|---|---|
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
|---|---|---|---|---|---|---|
props
Prop
Type
型と説明はコンポーネントのソースから抽出しています。既定値は出していません——cva の defaultVariants は 署名に現れないので、表に出すと「引数のデフォルトが書かれているものだけ」になり、嘘になります。