Vue 3 多步表单向导逻辑复用的核心是封装「步骤状态管理」「用户数据绑定」「校验与跳转控制」为可配置、不耦合 UI 的组合式函数,通过 useStepper 管理步骤、reactive 统一托管数据、校验函数动态注入,并组合成 useWizard 自定义 Hook 实现跨页面复用。

Vue 3 中实现多步表单向导的逻辑复用,核心是把「步骤状态管理」「用户数据绑定」「校验与跳转控制」这三块抽离为可导入、可配置、不耦合 UI 的组合式函数。不是复制粘贴组件,而是封装行为本身。
用 useStepper 封装步骤状态机
VueUse 的 useStepper 是专为向导设计的轻量状态管理工具,它不关心表单字段怎么渲染,只负责:当前在哪步、能否前进/后退、如何安全跳转。返回值全部响应式,可直接用于模板或配合其他逻辑使用。
- 传入步骤数组(如
['info', 'address', 'payment'])或对象(带标题、校验函数等元信息) - 自动提供
current(当前步骤名)、index(索引)、isFirst/isLast等布尔状态 - 所有导航方法(
next、goTo、goBackTo)都内置边界检查,不会越界跳转
用 reactive + 映射键名统一管理各步数据
每一步要存什么值,不应写死在组件里。推荐为每个步骤预设一个唯一数据键(如 userEmail、shippingAddress),再用 reactive 对象集中托管,保持结构清晰、类型可推导。
Element Plus Vue3 桌面组件库。在开发 Vue 3.x 页面时调用,使用 Element Plus 组件(如 el-button、el-input、el-form、el-table 等)。
- 定义步骤配置时就声明
key: 'userGender',和 formData 字段一一对应 - 用户选择后,通过
formData[key] = value直接赋值,无需 switch 或 if 判断步骤名 - 提交时
formData天然就是完整表单数据,无需手动拼接
把校验逻辑也做成可注入的函数
不同步骤的校验规则差异大,但执行时机一致(点击下一步前)。可以把校验抽成独立函数,按步骤名动态调用:
- 例如
validators.billingAddress = () => !!formData.billingName && isValidPhone(formData.phone) - 在
next()前调用validators[current.value]?.(),失败则阻断并提示 - 校验函数可单独单元测试,也可按需替换(比如开发期跳过邮箱验证)
组合导出一个 useWizard
把上述三者打包成自定义 Hook,对外只暴露最简接口:
- 输入:步骤配置数组、初始数据对象、校验映射表
- 输出:当前步骤、数据对象、
next()/back()、submit()和错误状态 - 多个页面只需
const { current, formData, next, submit } = useWizard(config),逻辑完全复用
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!









