卡比记账项目——发送验证码

215 阅读2分钟

做好了登陆界面,现在要实现点击按钮即可发送验证码的功能。

使用axios发送请求

拿到后端传来的验证码API,我们使用axios来向后端发送一个请求。

在此之前先需要在vite里面做一个代理。

根据webstorm的提示,可以知道第一个参数写url,也就是服务器地址,第二个参数写data。

截屏2022-11-10 15.05.28.png

截屏2022-11-10 15.07.21.png

它的结果我们用await来获取,所以前面要加上async。

截屏2022-11-10 15.08.44.png 尝试一下获取验证码。

network显示请求成功。同时我们登陆邮箱也收到了验证码。此时完成了第一次前后端联调用。

发送验证码倒计时

思路:这时我们点击发送验证码虽然会发送验证码,但是用户可能不知道,需要有一个60s的cd让他变成disabled,60s以后才可以重新发送验证码。并且这个60s是可视的,变成0之后disabled变成false。 我们需要的变量:一个间隔器timer每秒减1;一个显示数字的变量count, 此外timer可以得知发送的状态,当timer为空,则就是可以发送,若timer不为空,那么此时变成disabled。

首先在Form组件里声明这两个变量

截屏2022-11-10 15.25.56.png

count变量我们不直接写60,在props里面配置一下,

截屏2022-11-10 15.27.22.png 然后把这个配置的countForm写进默认值

const count = ref<number>(props.countFrom)

我们还需要一个计算变量,来判断此时处于什么发送状态。 如果timer为空说明没有计时,反之亦然。这时没必要用if-else,因为isCounting的布尔值和timer的value同时为真或者同时为假。可以写成如下:

截屏2022-11-10 15.32.22.png

截屏2022-11-10 15.50.21.png 如果在倒计时就显示剩余数字,否则显示发送。

截屏2022-11-10 15.35.23.png 但此时有一个问题,没有事件可以控制timer和count的变化。当我们点击时会触发父组件的click事件。我们在这里进行一个包装。

截屏2022-11-10 15.39.24.png 这个新函数里面先调用外部的onClick事件,随后再进行递减,当timer的value为0时要重置

截屏2022-11-10 15.48.05.png

测试过程中发现点击一次之后还可以继续点击发送,我们可以通过disabled的来进行控制。

让Button支持disabled 截屏2022-11-10 15.53.12.png

截屏2022-11-10 15.53.39.png