卡比记账项目——完善登陆界面

117 阅读2分钟

避免按钮重复点击

现有的功能下,我们可以在按钮进入倒计时之前连续点击两次发送验证码,并且真的可以成功的请求两次。我们要加一个点击之后不可再次立马点击的逻辑。我们可以把这个逻辑写在Button.tsx里面。

大致思路就是,button点击事件触发就会自我沉默,无论是发送请求还是什么其他的事件。 原本的button如下: 截屏2022-11-16 14.56.29.png

我们需要将disabled改成计算属性,我们需要考虑两个情况,其中是自我沉默以及用户是否希望沉默。 首先声明自我沉默,默认是false,点击之后会变成true。我们声明了点击事件的函数,他调用外部的props随后将自我沉默变成true。

截屏2022-11-16 15.02.17.png 此时这个button有两个disabled一个是selfDisabled一个是用户传来的

计算属性disabled如下:如果是自我沉默那么就返回true,如果是用户传来的,那么就返回用户传来的disabled 截屏2022-11-16 15.04.51.png

此外还要做一个定时,0.5s后将selfDisabled改回false。

发现可以一定程度上防止重复点击按钮,但是由于请求时间长达1s,所以不能完全解决。

我们尝试在Form中的props里添加一个disabled,并且判断

截屏2022-11-16 15.17.33.png

我们可以自定义一个hook,命名为useBool。 首先是一个useBool的函数,需要给的只是一个初始值 导出切换,开,关。

截屏2022-11-16 15.20.43.png 回到signInPage,使用这个hook

const { ref: refDisabled, toggle, on: disabled, off: enable } = useBool(false)

发请求时,先禁用,最后再取消禁用 截屏2022-11-16 15.24.50.png

完善细节

做完了验证码部分,现在用户正确输入验证码即可登录或者注册了。此时还没做这个功能。 点击登录会触发onSubmit事件,此时onSubmit暂时没有写请求。

截屏2022-11-16 15.29.03.png 发送请求:

const response = await http.post('/session', formData)

如果校验不通过,不应该发请求。

截屏2022-11-16 15.45.28.png 改成只有没有error才会发请求

截屏2022-11-16 15.47.56.png 测试过程中发现,输入正确的验证码,但是依然提示必填。这是因为,formItem中并没有把数据双向绑定到input里面,所以需要添加,

截屏2022-11-16 15.51.42.png

截屏2022-11-16 15.53.07.png 这样就成功了。

使用JWT存储localStorage

先ts声明类型,然后存储 截屏2022-11-16 16.03.18.png