关于 tanstack-form
用于在所述 Svelte 应用中使用 @tanstack/svelte-form 构建表单的技能,说明如何处理模式验证、服务器错误、提交状态及仅在成功后进行表单状态转换。
主要功能
- 01扩展生成的 Zod 模式
- 02区分同步验证与异步提交
- 03将 ProblemDetails 映射为表单错误
- 04失败后保留已输入值
- 05处理等待与成功状态
适用场景
- 01添加功能专属的表单验证
- 02显示 API 字段错误和表单错误
- 03防止重复提交
- 04仅在保存成功后关闭对话框
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ exceptionless/ exceptionless --skill tanstack-form安装后在 Claude Code 中输入/tanstack-form确认已加载。
详细介绍
TanStack Form
使用 @tanstack/svelte-form,并通过 $generated/schemas 派生功能模块的 schema。在功能模块自有文件中扩展 schema;不要编辑生成的输出。
当前示例
src/Exceptionless.Web/ClientApp/src/routes/(auth)/login/+page.svelte:表单创建、提交、字段组合和提交中状态。src/Exceptionless.Web/ClientApp/src/lib/features/auth/schemas.ts:生成的 schema 导出和功能模块专属验证。src/Exceptionless.Web/ClientApp/src/lib/features/shared/validation.ts:ariaInvalid、mapFieldErrors和problemDetailsToFormErrors。
请遵循当前实现,不要重复构建表单基础设施。将 API ProblemDetails 映射为字段错误或表单错误,失败后保留已输入的值,并且仅在提交成功后关闭对话框。
使用已安装的 Field 组件,并为其关联标签和验证属性。等待处理期间禁用重复提交。组件组合方式请参阅 shadcn-svelte。
提交生命周期
- 定义带类型的默认值,并扩展生成的 Zod schema,以添加功能模块专属约束或跨字段约束。
- 使用当前表单的同步验证钩子处理 schema 错误,并使用异步提交钩子执行服务端操作。遵循所引用实现的钩子约定,不要贸然在不同钩子之间转移 API 调用。
- 等待操作完成。使用
problemDetailsToFormErrors映射预期的 ProblemDetails;对于意外失败,提供表单级错误,但不要泄露内部详情。 - 通过
ariaInvalid和mapFieldErrors关联字段状态。除了字段错误,也要显示表单级错误,以便非字段错误仍然可见。 - 在所需工作完成前保持等待状态。失败时保留值;只有在成功且完成任何必要的缓存协调后,才重置表单、导航或关闭对话框。
检查无效输入、服务端拒绝、重复提交和成功完成的情况。对话框关闭本身并不能证明保存成功。
评论
支持 Markdown