Vue 3 表单校验逻辑抽离核心是用组合式 API 封装可复用校验能力,通过自定义 Hook 统一管理规则、状态与触发时机,支持同步/异步验证及 UI 库协同。

Vue 3 中实现表单校验逻辑抽离,核心是用组合式 API 封装可复用的校验能力,把“验证规则、状态管理、触发时机”从具体组件中解耦出来。不是写一堆重复的 if 判断,而是让每个字段只声明“我要什么规则”,由统一逻辑执行校验并返回结果。
用自定义 Hook(Composable)封装校验函数
创建 useValidator.js 或 useFormValidation.js,接收字段值和规则数组,返回校验状态:
- 内部维护
isValid(布尔)、error(首个错误提示)、validate(手动触发方法) - 规则支持对象形式:如
{ required: true, message: '必填' },或函数形式:(val) => val.length >= 6 || '至少6位' - 自动兼容同步/异步规则(例如用户名唯一性检查),异步规则返回 Promise,
validate可 await
集中管理通用规则,避免硬编码
把手机号、邮箱、身份证等高频校验提取为预设函数,导出供任意表单调用:
将静态 Vue 页面(index.vue)改造为动态页面(Custom.vue);稿源仅限 index.vue、其引用的 CSS 与资源路径,禁止参考仓库内其他文件。Invoke when user wants to transform a static Vue page into a dynamic data-driven page with Element UI components.
-
required('用户名')→ 返回必填规则配置 -
mobile('手机号')→ 返回正则 + 提示语 + blur 触发 -
asyncUnique('用户名', checkApi)→ 封装防抖 + loading + 后端查重逻辑 - 所有规则都统一格式,便于组合:
[required('密码'), minLength(8), hasNumber()]
配合 v-model 和响应式数据驱动验证状态
在业务组件中,不直接操作 error 变量,而是让校验 Hook 响应式地关联字段值:
- 传入
ref或computed的值,Hook 内部用watch监听变化(可选失焦或节流触发) - 输入框绑定
v-model,同时用:class="{ 'is-error': !pwdValidator.isValid }"控制样式 - 提交时遍历所有字段的
validate(),聚合结果:allValid = Object.values(validators).every(v => v.isValid)
与 Element Plus 等 UI 库协同工作
不放弃 el-form 的能力,而是增强它:
- 用
useFormHook 管理整个表单的model和rules,动态生成符合 el-form 要求的 rules 对象 - 子组件(如自定义输入框)通过
defineModel()(Vue 3.4+)暴露 v-model,再注入父级 validator 实例 - 深层嵌套表格类动态表单,用
prop="list.0.name"路径匹配 + Hook 动态注册字段,保证 el-form.validate() 能识别
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!









