generator函数适合实现前端多步骤表单向导,通过yield定义可控暂停点,封装每步状态、校验与跳转逻辑;支持条件分支、子流程复用、动态步骤及react/vue响应式集成,需注意错误处理与迭代器重置。

Generator 函数非常适合实现前端多步骤表单的向导逻辑,因为它能自然地暂停和恢复执行,把每一步表单的状态、校验、跳转逻辑封装成可控制的“暂停点”,避免嵌套回调或复杂的状态机。
用 yield 把每一步变成可控暂停点
每个 yield 对应一个表单步骤:显示某页、等待用户操作、校验数据、决定是否继续或回退。Generator 返回一个迭代器,调用 next() 就推进到下一步,传入参数还能把用户输入带进去。
- 定义 Generator 函数,每步 yield { step: 'step1', title: '基本信息' } 这样的描述对象
- 在外部控制层调用 iterator.next(inputData) 推进,并根据返回的 done 和 value 更新 UI
- 不需要手动维护 stepIndex 或 switch-case 列表,流程由 yield 顺序天然定义
结合状态与校验做条件分支
Generator 内部可以写 if/else 或 while,根据上一步返回的数据决定走哪条路径。比如邮箱格式不对就 yield 错误提示,不前进;或者根据用户选择跳过某步。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- yield 后接校验函数调用,校验失败时 yield 提示并再次 next() 停留在当前步
- 用 yield* anotherGenerator() 复用子流程(如“添加多个联系人”可单独抽成子向导)
- 支持动态步骤:比如根据用户选“个人”还是“企业”,yield 不同的后续步骤序列
配合 React/Vue 实现响应式向导组件
在 React 中,可以把 Generator 实例存在 ref 或 context 里,点击“下一步”触发 next(),再 setState 触发重新渲染;Vue 可用 ref + watchEffect 监听当前步骤对象。
- 组件只关心当前 currentStep = iterator.value,渲染对应表单字段和按钮
- “上一步”不是倒退迭代器(next() 不支持回退),而是用额外变量记录历史,或让 Generator 自己处理 back 逻辑(例如 yield { type: 'back' })
- 提交完成时,iterator.next(finalData).done === true 表示走完所有 yield,可触发最终提交
注意错误处理与重置
Generator 本身不抛错,但校验失败、网络请求拒绝等需要主动处理。建议用 try/catch 包裹 yield 后的异步操作,并通过 yield 返回错误状态供 UI 展示。
- 调用 iterator.throw(err) 可在 Generator 内部捕获异常,适合处理 API 请求失败
- 重置向导时,不要复用旧迭代器,重新调用 Generator 函数生成新 iterator
- 避免在 yield 后直接写副作用(如 localStorage 写入),应统一在 next() 返回后由外层处理,保持 Generator 纯净
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










