react / vue3 获取验证码倒计时封装组建

2 篇文章 0 订阅
2 篇文章 0 订阅

提示:本篇文章写了vue和react 获取验证码倒计时 功能



提示:以下是本篇文章正文内容,下面案例可供参考

一、获取email和手机验证码都适用

在这里插入图片描述

二、使用步骤

1.React

HTML

   <button className="verify-btn" type="button" disabled={flag} onClick={btnClick}>
       {flag ? <span>{codeRestTime}s</span> : <span>获取验证码</span>}
   </button>

JS 部分

代码如下(示例):
//本人用的框架 是 ant Design 。

interface IProps {
    phoneNumber: string,
    type: number
}

const VerifyCodeBtn = (props: IProps) => {
    let {t} = useTranslation()
    const [codeRestTime, setCodeRestTime] = useState(180);
    const [flag, setFlag] = useState(false)
    useEffect(() => {
        if (!flag) return
        let timer = setInterval(() => {
            setCodeRestTime(data => {
                data--;
                if (data === 0) {
                    clearInterval(timer)
                    setFlag(false)
                    setCodeRestTime(180)
                }
                return data
            });
        }, 1000)
        return () => {
            clearInterval(timer)
        }
    }, [flag])
    const btnClick = async () => {
        if (isEmpty(props.phoneNumber)) return
        setFlag(true)
        let verifyResult: any = await VerifyApi(props)
        notification.open({
            message: verifyResult.msg,
            top: 70,
            style: {width: 230, color: "#ffffff"},
            description: t('Tips'),
            icon: verifyResult.code === 200 ? <CheckCircleFilled style={{color: '#108ee9'}}/> :
                <CloseCircleFilled style={{color: '#D34151'}}/>,
        });
    }

    return (
        <button className="verify-btn" type="button" disabled={flag} onClick={btnClick}>
            {flag ? <span>{codeRestTime}s</span> : <span> {t('Request')}</span>}
        </button>
    )
}

使用

//组建所在地址

import VerifyCodeBtn from "@/components/VerifyCodeBtn"
   <VerifyCodeBtn phoneNumber={phoneNumber} type={1}/>

2.Vue3 部分

HTML

代码如下(示例):

   <template>
  <button
      class="verify-btn"
      round
      size="small"
      type="button"
      :disabled="!!codeRestTime"
      @click="btnClick"
  >
    {{ $t(codeRestTime ? `(${codeRestTime})s` : " Request ") }}
  </button>
</template>

JS

<script  lang="ts" setup>
import {ref} from "vue";
import { ElMessage } from 'element-plus'
import {isEmpty, validEmail} from '@/utils/is'
import { verifyApi } from "@/api/apiList";
let codeRestTime = ref<number>(0)

let props = defineProps({
  btnMsg: {
    type: String,
    default: "发送验证码",
  },
  restTime: {
    type: Number,
    default: 60,
  },
  choseType: {
    type: Number,
    default: 1,//1登录 2注册 3忘记密码
  },
  isEmail:{
    type: Boolean,
    default: false,
  },
  phone: {
    type: String,
    default: "",
  },
})
let emit = defineEmits(['sendVerifyCode']);

const btnClick = async () => {
  if(isEmpty(props.phone) || !validEmail(props.phone)) return
  codeRestTime.value = props.restTime;
  let timer: any = setInterval(() => {
    --codeRestTime.value;
    if (!codeRestTime.value) {
      clearInterval(timer);
      timer = null;
    }
  }, 1000);
  let codeParam = props.isEmail ? {email: props.phone} : {mobile: props.phone}
  let res: any = await verifyApi({...codeParam, type: props.choseType}, props.isEmail)
   res&&ElMessage({
    type: 'success',
    center: true,
    message: res.msg
  })
  emit("sendVerifyCode")
}
</script>

使用

//组建所在地址

import verifyCode from "@/components/verifyCode/index.vue"
<verifyCode :phone="1766********" :isEmail="true" />

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值