Vue3 如何封装一个合格的【获取验证码组件】

获取验证码组件

最近封装了一个 获取验证码 的组件,虽然算是一个比较小的组件,但是还是感觉比较有意思的,大致效果如下

 最基础的组件

我们可以从简单的开始,先实现一个比较简单基础的组件,后面再去完善它,最基础的代码如下

 这个时候可以看到这个组件的雏形已经出来了!

 实现倒计时

接下来我们需要写一个 useCountDown 的 Hooks ,来编写倒计时的逻辑~大家在风中组件的时候,要有这种习惯,就是把一些逻辑比较紧密的代码抽取到一个 Hooks 中去

注意:setState 是异步更新,所以想获取最新值需要使用useRef

 

 封装完后可以到组件中去使用

 这样就能达到想要的倒计时效果,但是还是有很多不足,比如按钮没有禁用,而且尺寸不能自定义,也没有响应式把验证码内容暴露出去

 完善组件封装

上面的组件封装的太简单了,一个好的组件需要具有比较好的自定义性、拓展性,所以我们需要完善一下组件的封装

可以把这个组件拆成两个部分:

  • CountdownInput输入框

  • CountButton按钮

 CountdownInput输入框

 CountButton按钮

 最终使用

 

 效果如下:

  • 15
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一些思路和代码示例。下面是一个简单的获取验证码组件的示例: ```html <template> <div class="verification-code"> <input type="text" v-model="phoneNumber" placeholder="请输入手机号" /> <button :disabled="countdown > 0" @click="getCode">{{ buttonText }}</button> </div> </template> <script> export default { data() { return { phoneNumber: "", countdown: 0, buttonText: "获取验证码", timer: null, }; }, methods: { getCode() { if (!this.phoneNumber) { alert("请输入手机号!"); return; } // 发送验证码接口 // ... // 模拟倒计时 this.countdown = 60; this.buttonText = `${this.countdown}秒后重新获取`; this.timer = setInterval(() => { this.countdown--; if (this.countdown <= 0) { clearInterval(this.timer); this.timer = null; this.buttonText = "获取验证码"; } else { this.buttonText = `${this.countdown}秒后重新获取`; } }, 1000); }, }, beforeDestroy() { if (this.timer) { clearInterval(this.timer); this.timer = null; } }, }; </script> <style scoped> .verification-code { display: flex; flex-direction: row; justify-content: center; align-items: center; } input { width: 80%; height: 40px; font-size: 16px; padding: 5px; margin-right: 10px; border-radius: 4px; } button { width: 20%; height: 40px; background-color: #409eff; border: none; color: #fff; font-size: 16px; border-radius: 4px; cursor: pointer; } button:disabled { background-color: #b5b5b5; cursor: not-allowed; } </style> ``` 这个组件包含一个输入框和一个按钮,当用户点击按钮时,会触发 `getCode` 方法,该方法会先检查用户输入的手机号,然后向后端发送验证码请求,并开启一个模拟的倒计时,防止用户重复获取验证码。在倒计时过程中,按钮会显示剩余时间,倒计时结束后,按钮会重新变为可用状态。同时,为了防止组件销毁时倒计时仍然在进行,我们需要在组件销毁前清除计时器。 以上示例代码基于 Vue.js 和 uni-app 框架,您可以根据您的实际需求进行修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值