多步骤表单向导逻辑应抽离为三个可复用组合式函数:useStepWizard管理步骤状态与导航,useStepData按步结构化存储数据,useStepValidation实现按步校验与错误反馈,组件内仅需三行调用即可集成完整能力。

多步骤表单的向导逻辑控制,核心在于把“当前步骤”“步骤跳转”“数据收集”“校验触发”这几件事从组件模板里抽出来,变成可复用、可测试、可独立维护的组合式函数。不是写一堆 v-if 和 ref,而是让逻辑自成体系。
useStepWizard:封装步骤状态与导航行为
定义一个 useStepWizard 函数,接收总步数或步骤配置,返回当前步序、是否首步/末步、跳转方法:
- 内部用 ref 管理 activeStep(从 0 或 1 开始可配),避免在多个组件中重复声明和同步
- 提供
next()、prev()、goTo(step)方法,自动做边界判断(如不能往前走到 -1) - 暴露
isFirst、isLast、canNext等计算属性,方便模板中直接绑定按钮禁用态 - 支持传入校验函数(如
validateCurrent: () => Promise<boolean></boolean>),next 时自动调用并阻断非法跳转
useStepData:为每一步绑定独立响应式数据
用户在第 2 步选了性别、第 3 步填了地址——这些数据不该堆在同一个 form 对象里平铺管理,而应按步骤结构化组织:
- 初始化一个
reactive({ step1: {}, step2: {}, step3: {} }),每个 key 对应一步的数据快照 - 提供
setData(step, partial)方法,只更新对应步骤字段,不触发无关响应 - 配合
watch或watchEffect,在步骤切换时自动保存当前步数据(防用户误操作丢失) - 支持
getData(step)按需读取,提交时再扁平合并或按业务结构组装最终 payload
useStepValidation:按步触发校验与错误反馈
不同步骤校验规则不同(比如第 1 步校邮箱格式,第 2 步校手机号),校验不应全局跑一遍,而要精准到步:
创建 Flask + Vue.js 全栈项目,采用单端口架构、uv 依赖管理、结构化日志和生产级前端设计。当用户要求以下操作时触发:创建新的 Flask+Vue 项目、搭建 Web 应用、构建全栈 Python+Vue 应用、初始化 Flask Web 项目、设置单端口 Flask 前后端项目。触发词:新建项目、创建项目、搭建项目、Flask项目、Vue项目。
立即学习“前端免费学习笔记(深入)”;
- 内部维护一个
ref<record boolean>>({ step1: false, step2: false })</record>记录各步校验状态 - 暴露
validateStep(step),调用前先清空该步错误,执行后更新对应状态 - 可与表单组件联动:在每步的
<form></form>上绑定@submit.prevent="validateStep(2) && next()" - 错误信息建议用
ref<record string>></record>存储,便于模板中{{ errors.step2.email }}直接取用
组合使用:在组件中简洁接入
组件只需三行逻辑就获得完整向导能力:
const { activeStep, isFirst, isLast, next, prev } = useStepWizard(3)const { setData, getData } = useStepData()const { validateStep, errors } = useStepValidation()
模板中用 v-if="activeStep === 1" 控制面板显隐,用 @chosen="setData(1, { gender: $event })" 更新数据,用 :disabled="!validateStep(1)" 控制按钮。所有状态变更和副作用都在组合式函数内闭环,组件保持轻量、专注渲染。

















