做好了登陆界面,现在要实现点击按钮即可发送验证码的功能。
使用axios发送请求
拿到后端传来的验证码API,我们使用axios来向后端发送一个请求。
在此之前先需要在vite里面做一个代理。
根据webstorm的提示,可以知道第一个参数写url,也就是服务器地址,第二个参数写data。
它的结果我们用await来获取,所以前面要加上async。
尝试一下获取验证码。
network显示请求成功。同时我们登陆邮箱也收到了验证码。此时完成了第一次前后端联调用。
发送验证码倒计时
思路:这时我们点击发送验证码虽然会发送验证码,但是用户可能不知道,需要有一个60s的cd让他变成disabled,60s以后才可以重新发送验证码。并且这个60s是可视的,变成0之后disabled变成false。 我们需要的变量:一个间隔器timer每秒减1;一个显示数字的变量count, 此外timer可以得知发送的状态,当timer为空,则就是可以发送,若timer不为空,那么此时变成disabled。
首先在Form组件里声明这两个变量
count变量我们不直接写60,在props里面配置一下,
然后把这个配置的countForm写进默认值
const count = ref<number>(props.countFrom)
我们还需要一个计算变量,来判断此时处于什么发送状态。 如果timer为空说明没有计时,反之亦然。这时没必要用if-else,因为isCounting的布尔值和timer的value同时为真或者同时为假。可以写成如下:
如果在倒计时就显示剩余数字,否则显示发送。
但此时有一个问题,没有事件可以控制timer和count的变化。当我们点击时会触发父组件的click事件。我们在这里进行一个包装。
这个新函数里面先调用外部的onClick事件,随后再进行递减,当timer的value为0时要重置
。
测试过程中发现点击一次之后还可以继续点击发送,我们可以通过disabled的来进行控制。
让Button支持disabled