useInvalidShake
送信を試みて無効だったとき、フォームコントロールを揺らします。入力中は揺らしません。
pnpm dlx shadcn@latest add https://hextaui.com/r/use-invalid-shake.jsonフックと、その依存関係をプロジェクトに追加します。
次のコードをコピーしてプロジェクトに貼り付けてください。
hooks/use-invalid-shake.ts インポートパスは、お使いのプロジェクト構成に合わせて更新してください。
このフックが設定するのは data-shake 属性だけです。動きはテーマの animate-button-shake によるもので、data-shake:motion-safe:animate-button-shake で付けます。HextaUI の Input、Textarea、Native select、Input group にはそのクラスがすでに含まれていて、フックも呼んでいます。独自のコントロールでは直接使ってください。
揺れは「なぜ送信できなかったのか」という1つの問いに答えます。そのためこのフックは、送信を試みた直後にだけ揺れ、フォームに入力している最中には揺れません。
| イベント | 説明 |
|---|---|
Submit attempt | 送信ボタンのクリック、フォームの入力欄での Enter、またはフォームの submit イベント。 |
Invalid within 600ms | コントロールが invalid を発火するか、aria-invalid="true"、data-invalid、:user-invalid を持つ場合です。これにはネイティブのバリデーション、Base UI のフィールド、送信直後に設定されるサーバーエラーが含まれます。 |
Shake | data-shake は400ms設定されます。これらのシグナルがいくつ届いても、1回の試みにつき1回だけ揺れます。 |
InputGroupの内側では、内側のコントロールだけでなく、グループ全体が揺れます。- 視差効果の軽減が有効な場合は、何も設定されません。揺れはメッセージではなく合図なので、どちらの場合も、揺れに加えて表示されるエラーメッセージを組み合わせてください。
- このフックでは、コントロールが
<form>に属している必要があります。属していない場合は何もしません。
- コントロールごとに
enabled引数でオフにするか、HextaUI の入力欄ではshake={false}を指定します。 - 属性を再設定するとアニメーションが再開するため、1回目がまだ実行中でも、2回目の失敗では再び揺れます。
- ネイティブのバリデーションは、送信時に最初の無効なコントロールにフォーカスします。揺れはその上に動きを加えるだけで、フォーカスを動かすことはありません。
| プロパティ | 型 | デフォルト |
|---|---|---|
ref監視するフォームコントロール。 | RefObject<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement | null> | – |
enabled揺れるかどうか。 | boolean | true |
| 属性 | 説明 |
|---|---|
data-shake | 送信の試みが失敗した後の400msの間、コントロールまたはその InputGroup に付きます。 |
Input、Textarea、NativeSelect、InputGroup。
- Motionすべてのコンポーネントがアニメーションに使うイージングカーブ、継続時間、モーション軽減のチェックと、サイズのモーフィングやスライドするハイライト用のフックです。
- Input3つのサイズ、無効状態と読み取り専用状態、ネイティブのバリデーションスタイル、スマートフォンでズームされない16pxのタッチ用フォントを備えたテキスト入力です。
- Input groupアイコン、テキスト、ボタン、キーボードのヒントを付けられる入力欄です。1つのボーダーとフォーカスリングを共有します。
- Native selectブラウザー標準のselectを、Inputに合わせてスタイルしたものです。控えめなプレースホルダー、Fieldのサポート、あらゆるデバイスでのOSピッカーを備えています。
- Textarea最小行数と最大行数の間で、書いた内容に合わせて滑らかに伸びる複数行テキストです。カウンター、バリデーション、送信ショートカットを備えています。