useToday
Das heutige Datum, das um Mitternacht und bei der Rückkehr zum Tab weiterläuft, ohne Hydration-Mismatch.
pnpm dlx shadcn@latest add https://hextaui.com/r/use-today.jsonFügt den Hook und alles, wovon er abhängt, zu deinem Projekt hinzu.
Kopiere den folgenden Code und füge ihn in dein Projekt ein.
hooks/use-today.ts Passe die Importpfade an dein Projekt-Setup an.
Greife danach, sobald eine Komponente vom aktuellen Datum abhängt, etwa um heute hervorzuheben, vergangene Tage zu deaktivieren oder bis zu einer Frist herunterzuzählen.
Das Lesen des Datums beim Rendern geht auf zwei Arten schief:
- Hydration-Mismatches. Der Server rendert in seiner Zeitzone, möglicherweise Stunden früher. Nahe Mitternacht sind sich Server und Browser über den Tag uneinig, und React verwirft das Server-HTML.
- Veraltete Daten. Ein über Nacht offener Tab zeigt gestern weiter als heute an, bis etwas anderes ihn neu rendert.
useToday gibt auf dem Server und während der Hydration undefined zurück, danach das lokale Datum. Es rendert auch um Mitternacht und wenn der Tab wieder sichtbar wird neu, da Timer in Hintergrund-Tabs pausiert werden und Mitternacht verpassen können.
Datumsgrenzen
Deaktiviere vergangene Tage und alles, was mehr als 30 Tage in der Zukunft liegt. Solange heute nicht bekannt ist, ist nichts deaktiviert, sodass das Server-HTML zum ersten Client-Render passt.
Die Datei exportiert auch die Bausteine, aus denen der Hook gebaut ist. Date-Keys sind lokale YYYY-MM-DD-Strings. Sie vergleichen sich nach Tag, sortieren korrekt und sind sicher als React-Keys oder Cache-Keys. subscribeToday ruft dich um Mitternacht und bei Rückkehr zum Tab zurück, außerhalb von React.
- Das zurückgegebene
Dateist Mitternacht in lokaler Zeit, sodass ein Vergleich mit<oder>Tage vergleicht, nicht Uhrzeiten. - Dasselbe
Date-Objekt kommt zurück, bis sich der Tag ändert, und ist daher sicher in Effect-Abhängigkeiten. - Plane den
undefined-Render ein. Ein Skeleton oder Rendern ohne datumsbasierte Grenzen funktionieren beide.
| Rückgabe | Beschreibung |
|---|---|
Date | undefined | Lokale Mitternacht heute. undefined auf dem Server und während der Hydration. |
| Export | Beschreibung |
|---|---|
toDateKey(date) | Ein Date als lokaler YYYY-MM-DD-String. |
fromDateKey(key) | Ein YYYY-MM-DD-String als Date um lokale Mitternacht. |
getTodayKey() | Der Date-Key von heute. |
subscribeToday(callback) | Ruft um Mitternacht und wenn der Tab wieder sichtbar wird zurück. Gibt eine Unsubscribe-Funktion zurück. |
Calendar und darüber Date picker.