flex布局渲染优惠券更稳定,localstorage存券需校验有效期,领取按钮需禁用防重复提交,微信卡包需配置jsapi权限。

优惠券列表渲染用 flex 布局比 float 更稳
直接用 float 排优惠券卡片,容易因高度不一致导致换行错位,尤其在动态加载或响应式场景下。用 display: flex 配合 flex-wrap: wrap 能自动处理折行和对齐,兼容性也够(IE10+ 支持)。
实操建议:
- 给容器加
display: flex; flex-wrap: wrap; gap: 12px;,gap替代 margin 更可控 - 每张券用
flex-basis: calc(50% - 6px)实现一排两张(移动端适配可配合媒体查询切为 100%) - 避免对券卡片设固定高度,改用
min-height+ 内容撑开,防止文字多时截断
localStorage 存领券状态前必须校验有效期
用户点“立即领取”后把优惠券写进 localStorage 很常见,但若不检查过期时间,下次打开页面可能显示“已领取”却实际失效——用户会以为系统出错。
实操建议:
- 存入时连同
expireAt时间戳一起存,例如:{ id: 'coupon_001', expireAt: 1735689600000 } - 读取时先用
Date.now() > item.expireAt判断是否过期,过期则自动清理并返回未领取状态 - 不要依赖服务端不返回过期券来规避问题——前端仍需独立校验,否则离线时逻辑崩坏
点击领取按钮触发接口前要禁用并加 loading 状态
用户手快连点两次,fetch 请求发出去两份,后端没做幂等就可能重复发券;更糟的是,按钮没视觉反馈,用户以为没点上,继续猛点。
实操建议:
- 点击后立刻设
button.disabled = true,同时用innerText或图标切换为“领取中…” - 请求成功或失败后,必须恢复按钮状态,否则用户无法重试——哪怕只写一行
btn.disabled = false - 别用
setTimeout模拟 loading,真实接口耗时不可控,该等就等,该报错就报错
微信内唤起卡包用 chooseCard 必须提前配置 JSAPI 权限
想让用户一键把优惠券存入微信卡包?直接调 wx.chooseCard 会报错 config:invalid signature 或 permission denied,根本不是代码写得不对,而是权限没开。
实操建议:
- 公众号后台 → “公众号设置” → “功能设置” → “JS接口安全域名” 必须填当前页面域名(不能带
http,不能是 IP) - 后端生成签名时,
jsapi_ticket和nonceStr、timestamp、url四者缺一不可,且url必须和当前页完全一致(含 hash 前的部分) - 调试阶段用
wx.config({ debug: true })查具体哪步失败,比猜强得多
真正难的不是堆功能,是让每张券的状态在本地缓存、服务端记录、微信卡包三处始终对得上——尤其是用户切后台再回来、横竖屏切换、网络中断重连这些时刻,状态同步稍有延迟,体验就断了。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











