避免按钮重复点击
现有的功能下,我们可以在按钮进入倒计时之前连续点击两次发送验证码,并且真的可以成功的请求两次。我们要加一个点击之后不可再次立马点击的逻辑。我们可以把这个逻辑写在Button.tsx里面。
大致思路就是,button点击事件触发就会自我沉默,无论是发送请求还是什么其他的事件。
原本的button如下:
我们需要将disabled改成计算属性,我们需要考虑两个情况,其中是自我沉默以及用户是否希望沉默。 首先声明自我沉默,默认是false,点击之后会变成true。我们声明了点击事件的函数,他调用外部的props随后将自我沉默变成true。
此时这个button有两个disabled一个是selfDisabled一个是用户传来的
计算属性disabled如下:如果是自我沉默那么就返回true,如果是用户传来的,那么就返回用户传来的disabled
此外还要做一个定时,0.5s后将selfDisabled改回false。
发现可以一定程度上防止重复点击按钮,但是由于请求时间长达1s,所以不能完全解决。
我们尝试在Form中的props里添加一个disabled,并且判断
我们可以自定义一个hook,命名为useBool。 首先是一个useBool的函数,需要给的只是一个初始值 导出切换,开,关。
回到signInPage,使用这个hook
const { ref: refDisabled, toggle, on: disabled, off: enable } = useBool(false)
发请求时,先禁用,最后再取消禁用
完善细节
做完了验证码部分,现在用户正确输入验证码即可登录或者注册了。此时还没做这个功能。 点击登录会触发onSubmit事件,此时onSubmit暂时没有写请求。
发送请求:
const response = await http.post('/session', formData)
如果校验不通过,不应该发请求。
改成只有没有error才会发请求
测试过程中发现,输入正确的验证码,但是依然提示必填。这是因为,formItem中并没有把数据双向绑定到input里面,所以需要添加,
这样就成功了。
使用JWT存储localStorage
先ts声明类型,然后存储