tanstack-form について
記載された Svelte アプリで @tanstack/svelte-form を使うフォーム構築スキルです。スキーマ検証、サーバーエラー、送信状態、成功後のみ行うフォーム遷移を説明します。
主な機能
- 01生成済み Zod スキーマの拡張
- 02同期検証と非同期送信の分離
- 03ProblemDetails のフォームエラーへの変換
- 04失敗時の入力値保持
- 05送信中と成功状態の管理
活用シーン
- 01機能固有のフォーム検証の追加
- 02API のフィールドエラーとフォームエラーの表示
- 03二重送信の防止
- 04保存成功後のみダイアログを閉じる
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ exceptionless/ exceptionless --skill tanstack-formインストール後、Claude Code で/tanstack-formを入力して読み込まれたか確認します。
詳細
TanStack Form
$generated/schemas から派生したフィーチャースキーマとともに @tanstack/svelte-form を使用します。スキーマはフィーチャーが所有するファイルで拡張し、生成された出力は編集しないでください。
現在の例
src/Exceptionless.Web/ClientApp/src/routes/(auth)/login/+page.svelte:フォームの作成、送信、フィールドの構成、送信中の状態。src/Exceptionless.Web/ClientApp/src/lib/features/auth/schemas.ts:生成されたスキーマのエクスポートと、フィーチャー固有のバリデーション。src/Exceptionless.Web/ClientApp/src/lib/features/shared/validation.ts:ariaInvalid、mapFieldErrors、problemDetailsToFormErrors。
フォーム基盤を重複して実装せず、現在の実装に従ってください。API の ProblemDetails をフィールドエラーにマッピングし、失敗後も入力値を保持し、送信が成功した後にのみダイアログを閉じてください。
関連付けられたラベルと検証属性を備えた、インストール済みの Field コンポーネントを使用してください。処理中は重複送信を無効にしてください。コンポーネントの構成については、shadcn-svelte を参照してください。
送信のライフサイクル
- 型付きのデフォルト値を定義し、機能固有またはフィールド間の制約を追加するために、生成された Zod スキーマを拡張します。
- スキーマエラーには現在のフォームの同期バリデーションフックを使用し、サーバー操作には非同期送信フックを使用します。API 呼び出しを安易に別のフックへ移動せず、参照先の実装で定められたフックの契約に従ってください。
- 操作を待機します。想定される ProblemDetails は
problemDetailsToFormErrorsでマッピングし、予期しない失敗には内部の詳細を公開せずにフォームレベルのエラーを表示します。 ariaInvalidとmapFieldErrorsを介してフィールドの状態を関連付けます。フィールドに関係しない失敗も見えるように、フィールドエラーだけでなくフォームレベルのエラーも表示します。- 必要な処理が完了するまで保留状態を維持します。失敗時は入力値を保持し、リセット、画面遷移、またはダイアログを閉じる操作は、成功し、必要なキャッシュの整合性調整が完了した後にのみ行ってください。
無効な入力、サーバーによる拒否、繰り返しの送信、正常な完了を確認してください。ダイアログが閉じたことだけでは、保存が成功した証拠にはなりません。
コメント
Markdown 対応