用途:vee-validate 4.15.1 是 Vue 3 的表单校验库,用于编写、审查和调试导入 vee-validate 的 Vue 表单。要求 vue ^3.4.26 作为 peer 依赖,仅支持 Vue 3;Vue 2 需使用 2.x/3.x 版本。提供 ESM 与 CJS,sideEffects 为 false,单一入口 vee-validate。
主要能力:提供两种 API 风格。组合式 API 以 useForm、defineField、handleSubmit 为主;声明式组件以 Form、Field、FieldArray、ErrorMessage 为主,配合作用域插槽。schema 适配器位于独立包 @vee-validate/yup、@vee-validate/zod、@vee-validate/valibot,全局规则在 @vee-validate/rules,多语言消息在 @vee-validate/i18n。
使用方式:用 defineField(path, config?) 绑定字段,返回 [model, props],props 用 v-bind 展开、model 用 v-model 绑定。不要直接写 values.field,应使用 defineField 的 model、setFieldValue 或 useSetFieldValue。useFieldModel、defineComponentBinds、defineInputBinds 已弃用,改用 defineField。TypeScript 下需用对应 @vee-validate/* 包的 toTypedSchema 包装 yup/zod/valibot schema,否则会报 “No such validator 'VVTypedSchema' exists”。自定义组件内 useField 默认不同步 v-model(syncVModel 默认 false,4.10.0 起为破坏性变更),可按字段开启 syncVModel: true 或传入 model prop 名。字段名是路径:点号嵌套对象,[0] 索引数组,用方括号包裹如 [user.name] 可把点号视为字面量;errors 对象始终是扁平的,需按字段名原样引用。数组字段用 useFieldArray 的 fields 遍历,v-for 以 entry.key 作 key,不要用索引。响应式字段名应传 getter,如 useField(() => props.name)。schema 应保持非响应式,声明在 ref/reactive 之外或用 markRaw 包裹。handleSubmit.withControlled(cb) 只提交经 useField/defineField 注册的字段。
校验模式:全局默认 validateOnBlur: true、validateOnChange: true、validateOnInput: false、validateOnModelUpdate: true、bails: true,可用 configure() 修改;这四个触发标志仅对 <Field> 组件生效,不作用于 useField。若只想在提交时校验,可在 defineField 配置或全局关闭 input/change/blur 触发。建议仅在交互后显示错误,如 v-if="errorMessage && meta.touched"。
适用场景与限制:适用于 Vue 3 表单校验、嵌套对象与数组字段、schema 校验与多语言错误消息。限制包括仅支持 Vue 3、typed schema 需适配器包装、useField 默认不同步 v-model、withControlled 下 typed schema 仍可能暴露全部初始值(已知未决问题)。