我用AI一周写了4个小程序页面,然后把经验沉淀成了组件库

2 阅读9分钟

我用AI一周写了4个小程序页面,然后把经验沉淀成了组件库

上周五下午5点,产品经理丢过来一份PRD:"海外商超小程序,下周三要能演示。"

我数了一下,核心页面4个:登录注册、首页、商品列表、购物车。后端接口已经定义好了,就差前端。

4天4个页面,还要能演示。如果是以前,这个时间有点紧。但现在我不太慌了。

因为这次我打算全程让Cursor来写,我的角色从"写代码的人"变成"review代码的人"。

最终结果:周三上午演示顺利通过,周四我做了一件事——把这4个页面里可以复用的部分抽成了组件库。

这篇文章把整个过程拆开讲,重点不在"AI有多厉害",而在"怎么把一次性的项目交付变成可复用的技术资产"。


Day1(周六):搭骨架

我不会一上来就让AI写页面。先搭好项目骨架和基础规范,后面才不会乱。

打开Cursor,新建了一个Taro + React项目。然后在项目根目录建了一个cursor-context.md

# 项目:海外商超小程序
# 技术栈
- 框架:Taro 3.x + React
- UI组件库:TDesign 小程序版
- 状态管理:Zustand
- 请求:Taro.request,统一封装在 utils/request.js

# 目录结构
- src/pages/        页面
- src/components/   公共组件
- src/store/        状态管理
- src/utils/        工具函数
- src/api/          接口定义

# 命名规范
- 页面文件夹:kebab-case(如 product-list)
- 组件文件:PascalCase(如 ProductCard)
- 工具函数:camelCase(如 formatDate)

# 接口规范
- 基础路径:https://api.example.com
- 响应格式:{ code: number, data: T, message: string }
- 错误码:401未登录 403无权限 500服务端错误
- Token放在Header里,key为 Authorization

# 已有组件(会持续更新)
(这个区域留给后续沉淀的组件)

这个文件是整个项目里最重要的东西。每次新开Cursor对话,第一件事就是把这段内容丢进去。

然后告诉Cursor:

"帮我初始化项目骨架。按上面的目录结构建好所有文件夹和基础文件,包括:request封装、store初始化、全局样式变量。不要写具体页面,先把基础设施搭好。"

Cursor花了几分钟,项目骨架搭好了。我检查了一下目录结构和代码风格,没大问题,改了两个小细节。


Day2(周日):登录注册模块

这个模块看起来简单,但坑不少。手机号+验证码登录、邮箱注册、忘记密码、用户协议弹窗,涉及表单验证、接口对接、状态管理。

我给Cursor的指令是这样的:

"现在开始做登录注册模块,包含3个页面:

  1. 登录页:手机号+验证码登录 / 邮箱+密码登录,Tab切换
  2. 注册页:邮箱注册,含用户协议勾选
  3. 找回密码页:邮箱验证 → 设置新密码

要求:

  • 使用TDesign的Form、Input、Button组件
  • 表单验证要完整(手机号格式、邮箱格式、密码长度)
  • 验证码倒计时60秒
  • 登录成功后把token存到storage,更新store
  • 每个页面先给设计方案,我确认后再写代码"

Cursor先给了一份设计方案,列出了每个页面的字段、组件选择、状态流转。我看了下没什么问题,让它开始写。

大概40分钟后,三个页面写完了。

我的review重点:

  • 表单验证逻辑:检查了边界情况(空值、特殊字符、超长输入)
  • Token存储:确认用了Taro.setStorageSync,并且设置了过期时间
  • 错误处理:检查了网络异常、接口超时的处理

发现一个问题:Cursor写的验证码倒计时有个bug——切换到后台再切回来,倒计时没有暂停,直接变成负数了。我用Taro.onAppHideTaro.onAppShow加了暂停/恢复逻辑,改了大概10行代码。

这一天的工作量,以前大概要一天半。这次加上review和修bug,大概用了4个小时。


Day3(周一):首页 + 商品列表

这两个页面同时做,因为它们有共享的组件需求(卡片、轮播图、空状态)。

先给Cursor丢了一份简化版的UI设计图(截图,不是Figma链接,因为Cursor看不了Figma),然后描述需求:

"首页需要:

  • 顶部搜索栏(不接搜索功能,先放个占位)
  • 轮播图(接口返回图片列表)
  • 分类入口(横向滚动的图标+文字)
  • 推荐商品列表(2列网格布局)

商品列表页需要:

  • 顶部分类Tab(全部/水果/蔬菜/零食...)
  • 商品卡片(图片+名称+价格+加入购物车按钮)
  • 下拉刷新 + 上拉加载更多
  • 空状态展示"

Cursor写的时候,我注意到一个有意思的事:它在写商品列表的时候,自动把商品卡片抽成了一个独立组件ProductCard

我没有让它这么做。

但这恰恰是我想要的。因为商品卡片在首页和列表页都要用,如果不抽成组件,就是两份重复代码。

这里有个经验:如果你在cursor-context.md里写了组件命名规范和"已有组件"列表,Cursor在写新代码的时候会倾向于复用和抽象。你不一定需要显式告诉它"这里要抽组件",它自己会判断。

这一天review的时候我主要做了几件事:

  • 检查图片加载:加了lazy-load属性和加载失败兜底图
  • 检查下拉刷新/上拉加载的交互逻辑
  • 调整了一下卡片间距和字体大小

用了大概5个小时,两个页面搞定。


Day4(周二):购物车

购物车是4个页面里最复杂的。涉及列表渲染、数量编辑、单选/全选、价格计算、结算跳转。

"购物车页面需求:

  • 商品列表(图片+名称+规格+单价+数量编辑+删除)
  • 左侧复选框(单选+全选)
  • 底部结算栏(已选数量+总价+结算按钮)
  • 空购物车状态
  • 编辑模式(批量删除)

买过之后store里缓存一份购物车数据,下次打开小程序直接展示"

这个页面Cursor写了大概50分钟,代码量比前三个页面加起来还多。

review的时候我发现三个问题:

  1. 数量编辑没有做防抖。用户快速点击+/-按钮会连续发接口请求,可能造成数量不一致。加了500ms的防抖。

  2. 价格计算有浮点数精度问题0.1 + 0.2这种经典JS坑。引入了一个简单的金额计算工具函数,用整数运算代替浮点数。

  3. 删除商品后,如果当前页商品全部删完,没有自动返回列表页。加了一个判断。

修完这三个问题,购物车页面算完成了。


Day5(周三):演示 + 沉淀组件库

周三上午产品演示,4个页面跑通了,没有大问题。提了几个小优化意见,当天改完。

然后我做了这次最有价值的事:把4个页面的公共部分抽出来,做成了一个组件库。

我在review那4天代码的时候,已经在心里有数了。哪些组件被多次使用、哪些逻辑可以复用:

组件来源页面功能复用场景
FormInput登录/注册/找回密码带验证的手机号/邮箱/密码输入框所有表单页面
CountdownBtn登录页验证码倒计时按钮任何需要验证码的场景
ProductCard首页/商品列表商品信息卡片任何商品展示
CartBar购物车底部结算栏订单确认、收藏夹等
EmptyState多个页面空状态占位通用
PriceText商品/购物车金额展示(处理精度)所有涉及价格的地方
ImageLoader多个页面带loading和兜底图的图片任何图片展示

然后我让Cursor做了一件事:

"基于上面这些组件的使用情况,帮我:

  1. 把它们统一放到 src/components/ 目录
  2. 每个组件写一个README,说明props和使用示例
  3. 写一份组件库总览文档,列出所有组件和用法
  4. 给每个组件加上基本的单元测试(用Jest)"

Cursor花了一个多小时,把组件整理好了,文档和测试也写了。我过了一遍,调整了几个API设计不太统一的地方(比如有的组件用onClick,有的用onPress,统一成了小程序习惯的onClick)。

最后,把这个组件库的信息更新到了cursor-context.md的"已有组件"区域。这样下次开新对话,Cursor就知道有哪些组件可以直接用了。


经验总结

先搭规范,再写业务

如果你直接让AI写页面,不给它上下文,它会按自己的理解来——变量命名可能跟你项目不一致、组件结构可能跟你的习惯不同、代码风格可能不统一。花10分钟写好cursor-context.md,后面能省很多review的时间。

分模块推进,不要一口气全做完

我可以一次性让Cursor写完4个页面,但我没有。每做完一个模块就review,问题及时纠正,不会积累到后面。而且上下文不会太长,Cursor的处理质量也更稳定。

让AI主动抽象组件,但你要把关

这次最有意思的发现:Cursor会自己判断哪些东西该抽成组件。ProductCardEmptyState都是它主动抽象的,我没让它这么做。但不是所有抽象都对。有时候它会把只用了一次的样式也抽成组件,这种情况你得把它合并回去。

我的原则:至少在两个地方使用,才值得抽。

组件库不是终点,是起点

抽出组件库之后,最大的收益是团队其他人也能用,新项目可以直接复制这套组件启动更快。而且你在做抽象的过程中,对项目架构的理解也会更深。


总结

阶段耗时AI产出人工调整
项目骨架1h目录结构+基础文件改了2个小细节
登录注册4h3个完整页面修了倒计时bug
首页+商品列表5h2个完整页面调样式和交互
购物车4h1个完整页面修了3个逻辑问题
组件库沉淀2h7个组件+文档+测试调整API设计
总计16h

16个小时完成4个页面+一个组件库。如果不用AI,光写页面大概需要40-50个小时,组件库沉淀另外还要10-15个小时。

省下来的时间,我用来做了产品演示的准备和代码review。质量没有打折扣。

这篇文章不是要证明AI能替代程序员。恰恰相反——整个过程里我最花时间的事是review和架构决策,这些是AI做不了的。

AI帮我省了写代码的时间,让我有更多精力做真正需要思考的事。这才是它最大的价值。