useInvalidShake
Lässt ein Formularelement wackeln, wenn ein Absendeversuch es als ungültig findet, und nie, während noch getippt wird.
pnpm dlx shadcn@latest add https://hextaui.com/r/use-invalid-shake.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-invalid-shake.ts Passe die Importpfade an dein Projekt-Setup an.
Der Hook setzt nur ein data-shake-Attribut. Die Bewegung kommt vom animate-button-shake des Themes, das du mit data-shake:motion-safe:animate-button-shake anhängst. Input, Textarea, Native select und Input group von HextaUI enthalten diese Klasse bereits und rufen den Hook auf. Nutze ihn direkt für eigene Steuerelemente.
Ein Wackeln beantwortet eine Frage: Warum hat mein Absenden nicht funktioniert? Deshalb wackelt der Hook nur direkt nach einem Absendeversuch und nie, während jemand das Formular noch ausfüllt.
| Event | Beschreibung |
|---|---|
Submit attempt | Ein Klick auf einen Submit-Button, Enter in einem Input des Formulars oder das submit-Event des Formulars. |
Invalid within 600ms | Das Steuerelement löst invalid aus oder hat aria-invalid="true", data-invalid oder :user-invalid. Das deckt native Validierung, Base-UI-Fields und Serverfehler ab, die direkt nach dem Absenden gesetzt werden. |
Shake | data-shake wird für 400ms gesetzt. Es wackelt einmal pro Versuch, egal wie viele dieser Signale eintreffen. |
- In einer
InputGroupwackelt die ganze Gruppe, nicht nur das innere Steuerelement. - Bei reduzierter Bewegung wird nichts gesetzt. Kombiniere das Wackeln in jedem Fall mit einer sichtbaren Fehlermeldung, da das Wackeln ein Hinweis ist, nicht die Meldung.
- Der Hook braucht ein Steuerelement, das zu einem
<form>gehört. Ohne eines tut er nichts.
- Schalte es pro Steuerelement mit dem Argument
enabledoder mitshake={false}an den Inputs von HextaUI ab. - Das Neustarten des Attributs startet die Animation neu, sodass ein zweiter fehlgeschlagener Versuch erneut wackelt, auch wenn der erste noch läuft.
- Die native Validierung fokussiert beim Absenden das erste ungültige Steuerelement. Das Wackeln fügt nur Bewegung hinzu und verschiebt nie den Fokus.
| Prop | Typ | Standard |
|---|---|---|
refDas Formular-Steuerelement, das beobachtet wird. | RefObject<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement | null> | – |
enabledOb gewackelt wird. | boolean | true |
| Attribut | Beschreibung |
|---|---|
data-shake | Vorhanden für 400ms nach einem fehlgeschlagenen Absendeversuch, am Steuerelement oder seiner InputGroup. |
Input, Textarea, NativeSelect und InputGroup.
- MotionDie Easing-Kurven, Dauern und der Reduced-Motion-Check, mit denen jede Komponente animiert, plus Hooks für Größen-Morphs und gleitende Hervorhebungen.
- InputEin Texteingabefeld mit drei Größen, ungültigen und schreibgeschützten Zuständen, nativem Validierungsstyling und einer 16-px-Schrift für Touch, damit Smartphones nie hineinzoomen.
- Input groupEin Input mit angehängten Icons, Text, Buttons oder Tastaturhinweis, die sich einen Rahmen und einen Fokusring teilen.
- Native selectDas native Select des Browsers, passend zu Input gestylt, mit dezentem Platzhalter, Field-Unterstützung und dem Picker des Betriebssystems auf jedem Gerät.
- TextareaMehrzeiliger Text, der mit dem Geschriebenen zwischen einer minimalen und maximalen Zeilenzahl sanft wächst, mit Zählern, Validierung und Absende-Tastenkürzel.