前言
最近在做一个 H5 工具,需要手机号 + 验证码登录,很自然地,点击发送验证码后需要等待一段时间才能重新发送,用于请求节流,避免用户疯狂点击:
不过这里其实有个隐藏需求——如果仍然在冷却时间内
,那么用户无论是刷新或是关闭页面,再次打开登录弹窗,需要直接展示正确的倒计时状态
。
解决方案
使用经典的 localStorage:
· 发送验证码时,将发送时间 (lastSendingTime) 存入 localStorage,并开启 60 秒倒计时。
· 倒计时结束后,清除 localStorage 中的 lastSendingTime。
· 重新进入页面时,若 localStorage 中存有 lastSendingTime,则说明仍处于冷却时间内,那么计算出剩余的倒计时 N,并开启 N 秒倒计时。
Talk is cheap, show me the code!
1 | const [countdown, setCountdown] = useState(60) // 倒计时 |
最终效果
总结
一开始感觉这是个很简单的小需求,可能 20min 就写完了,但实际花了两个多小时才把逻辑全部 cover 到,还是不能太自信啊~
发布时间: 2023年08月13日 12:45:38
本文链接: https://www.victoryeah.com/post/9e1be607.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可,转载请注明出处!