拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Una UI表单实战:结合vee-validate与zod构建类型安全的验证表单

Una UI表单实战结合vee-validate与zod构建类型安全的验证表单【免费下载链接】una-uiThe Atomic UI framework for Nuxt, powered by Unocss engine 项目地址: https://gitcode.com/gh_mirrors/un/una-ui对于使用 Nuxt 开发的团队来说Una UI这套基于 UnoCSS 引擎的原子化 UI 框架提供了开箱即用的表单组件与验证方案。本文将带你用Una UI 的 FormField 组件配合vee-validate与zod一步步搭建一个类型安全的验证表单——从 schema 定义、字段校验到提交处理全程有类型推导护航出错率大幅降低。无论你是刚开始接触 Nuxt 表单开发的新手还是想优化现有验证流程的老手这篇Una UI 表单实战指南都能让你快速上手。为什么选择 Una UI 做表单验证Nuxt 生态里表单方案不少但 Una UI 的优势非常直接原子化样式基于 UnoCSS 引擎预设preset开箱即用无需手写大量 CSS组件即插即用FormField、Input、Select、Checkbox等表单组件齐全且统一遵循无障碍规范与 vee-validate 深度集成框架自带useFormField组合式函数直接打通 vee-validate 的字段上下文zod 类型安全通过vee-validate/zod的toTypedSchemaschema 类型与表单值类型完全同步这四者组合让写表单从繁琐的样板代码中解放出来。第一步安装依赖与基础配置在 Nuxt 项目中安装 Una UI 模块后还需要两个验证相关的依赖npm install vee-validate vee-validate/zod zod安装完成后你的项目里就有了依赖作用vee-validate表单状态管理与校验逻辑zod声明式 schema 定义与类型推导vee-validate/zod把 zod schema 转成 vee-validate 的验证规则第二步用 zod 定义类型安全的验证规则类型安全的核心在于先定义 schema再让表单值类型自动推导出来。在app.vue或表单组件中我们这样定义一个登录注册表单的 schemaimport { toTypedSchema } from vee-validate/zod import * as z from zod const formSchema toTypedSchema(z.object({ username: z.string().min(2).max(50), password: z.string().min(6).max(50), note: z.string(), framework: z.object({ value: z.string().min(1, This field is required), label: z.string().min(1, This field is required), }), notifications: z.boolean(), enabled: z.boolean(), }))toTypedSchema会把 zod 的校验规则和 TypeScript 类型一次性交给 vee-validate后续handleSubmit拿到的values参数拥有完整类型提示拼错字段名立刻报错。官方示例可在 ExampleVueFormBasic.vue 中查看完整写法。第三步用 FormField 快速接入表单这是 Una UI 最省力的部分。FormField组件负责 label、错误消息、说明文字的统一渲染你只需要把name与 schema 字段对应起来template form classmx-auto max-w-sm space-y-4 submit.preventonValidating() NFormField nameusername labelUsername NInput placeholderUsername / /NFormField NFormField namepassword labelPassword NInput typepassword placeholderPassword / /NFormField NFormField namenotifications labelNotifications descriptionParticipating, mentions and custom NCheckbox labelOn github / /NFormField NButton typesubmitSubmit/NButton /form /templatelabel自动生成可点击聚焦的标签description展示字段说明点击 label 会自动聚焦输入框因为框架自动把for和id关联起来了第四步让验证状态与错误提示自动联动Una UI 的FormField内部通过 useFormField.ts 注入了 vee-validate 的字段上下文自动读取valid字段是否通过校验error当前错误信息isDirty/isTouched字段是否被修改或触碰过所以 schema 校验失败时错误消息会自动显示在对应字段下方无需手写v-if判断。若想手动控制提示状态也可以用status和message属性如success、warning、error见 ExampleVueFormStatus.vue。第五步提交时自动聚焦第一个错误字段一个提升体验的小技巧提交前先整体校验如果出错自动把焦点移动到第一个错误字段并滚动到可视区域。const { handleSubmit, validate, errors } useForm({ validationSchema: formSchema, }) const onSubmit handleSubmit((values) { alert(JSON.stringify(values, null, 2)) }) async function onValidating() { await validate() const firstErrorField Object.keys(errors.value)[0] if (firstErrorField) { const el document.querySelector([name${firstErrorField}]) as HTMLElement el?.focus() el?.scrollIntoView({ behavior: smooth, block: center }) } onSubmit() }这样用户提交空表单时能立刻看到并定位到第一个出错项而不是靠肉眼在长表单里找。第六步自定义样式与扩展Una UI 的所有表单组件都支持原子化类名覆盖用class直接覆盖单个字段布局通过 preset 的 shortcuts 统一调整表单风格相关预设见 form.ts组件类型定义如status、required、hint、description等集中在 form.ts可据此做二次封装总结一套可复用的类型安全表单方案回顾整个流程Una UI vee-validate zod的组合只用了三步核心操作zod 定义 schema类型与规则单一来源FormField 绑定字段模板简洁错误展示自动完成提交前统一校验聚焦首个错误字段体验更友好这种模式下表单类型由 schema 驱动验证逻辑与 UI 解耦团队新增字段时只需改 schema 和模板两处几乎不可能出现规则改了、类型没改的隐患。如果你正在 Nuxt 项目中寻找高效的表单验证方案不妨把这套组合纳入你的工具库。【免费下载链接】una-uiThe Atomic UI framework for Nuxt, powered by Unocss engine 项目地址: https://gitcode.com/gh_mirrors/un/una-ui创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门