如何用 React 优雅实现用户引导,像 HagiCode 那样?

摘要:在 React 项目中优雅实现新用户引导:HagiCode 的 driver.js 实践 当用户第一次打开你的产品时,他们真的知道该从哪里开始吗?这篇文章聊聊我们在 HagiCode 项目里用 driver.js 做新用户引导的那些事儿,也
在 React 项目中优雅实现新用户引导:HagiCode 的 driver.js 实践 当用户第一次打开你的产品时,他们真的知道该从哪里开始吗?这篇文章聊聊我们在 HagiCode 项目里用 driver.js 做新用户引导的那些事儿,也算是抛砖引玉罢了。 背景 你有没有遇到过这样的场景:新用户注册了你的产品,打开页面后一脸茫然,东张西望,不知道该点哪里、该做什么。作为开发者,我们总以为用户会"自己探索",毕竟人的好奇心是无限的嘛。可现实是——大部分用户会在几分钟内因为找不到入口而悄悄离开,就像故事开始得突然,结束得也自然。 新用户引导是解决这个问题的重要手段,只是实现起来也不那么简单。一个好的引导系统需要: 能够精准定位页面元素并高亮显示 支持多步骤引导流程 能够记住用户的选择(完成/跳过) 不影响页面性能和正常交互 代码结构清晰,易于维护 在开发 HagiCode 的过程中,我们也遇到了同样的挑战。HagiCode 是一个 AI 代码助手项目,核心工作流是"用户创建提案 → AI 生成计划 → 用户审核 → AI 执行"这样一套 OpenSpec 流程。对于第一次接触这个概念的用户来说,这套流程是全新的,必须有一个好的引导来帮助他们快速上手。毕竟,新事物总是需要一点时间的。 关于 HagiCode 本文分享的方案来自我们在 HagiCode 项目中的实践经验。HagiCode 是一个基于 Claude 的 AI 代码助手,通过 OpenSpec 工作流帮助开发者更高效地完成代码任务。你可以在 GitHub 上查看我们的开源代码。 为什么选择 driver.js 在技术选型阶段,我们评估了几个主流的引导库,怎么说呢,每个都有自己的特点: Intro.js:功能强大但体积较大,样式定制相对复杂 Shepherd.js:API 设计很好,但对于我们的场景来说有点"重" driver.js:轻量、简洁、API 直观,且支持 React 生态 最终我们选择了 driver.js,其实也没什么特别的理由,主要基于以下几点考虑: 轻量级:核心库体积小,不会显著增加打包体积 API 简洁:配置项清晰直观,上手快 灵活性:支持自定义定位、样式和交互行为 动态导入:可以按需加载,不影响首屏性能 选型这件事,其实没有最好的,只有最合适的罢了。 技术实现 核心配置 driver.js 的配置非常直观,以下是 HagiCode 项目中的核心配置: import { driver } from 'driver.js'; import 'driver.js/dist/driver.css'; const newConversationDriver = driver({ allowClose: true, // 允许用户关闭引导 animate: true, // 启用动画效果 overlayClickBehavior: 'close', // 点击遮罩层关闭引导 disableActiveInteraction: false, // 保持元素可交互 showProgress: false, // 不显示进度条(我们有自定义进度管理) steps: guideSteps // 引导步骤数组 }); 这些配置背后的考虑是: allowClose: true - 尊重用户选择,不强制完成引导,毕竟强扭的瓜不甜 disableActiveInteraction: false - 某些步骤需要用户实际操作(如输入文字),所以不能禁用交互 overlayClickBehavior: 'close' - 给用户一个快速的退出方式 状态管理 引导状态的持久化是关键——我们不希望每次刷新页面都重新引导,那样挺烦人的。
阅读全文