import React, { useState } from 'react';
const Index = () => {
const [VCodeTime, setVCodeTime] = useState(60);
const [sendSwitch, setSendSwitch] = useState(true);
const randomNum = ()=> {
let arr = [1, 2, 3] // 保证六位随机码包含数字+大写字母+小写字母
let code = ''
function getRandom (min, max) {
return Math.round(Math.random() * (max - min) + min)
}
function randomsort (a, b) {
return Math.random() > 0.5 ? -1 : 1
// 用Math.random()函数生成0~1之间的随机数与0.5比较,返回-1或1
}
for (let i = 0; i < 3; i++) {
arr.push(getRandom(1, 3)) // 补成六位
}
arr.sort(randomsort) // 打乱数组
for (let i = 0; i < 6; i++) {
let type = arr[i]
switch (type) {
case 1:
code += String.fromCharCode(getRandom(48, 57)) // 数字
break
case 2:
code += String.fromCharCode(getRandom(65, 90)) // 大写字母
break
case 3:
code += String.fromCharCode(getRandom(97, 122)) // 小写字母
break
}
}
console.log(code)
}
// 点击发生验证码
const sendCode = () => {
if (sendSwitch) {
// 防止在发送验证码过程中再次点击
setSendSwitch(!sendSwitch);
let time = 60 //60秒
// 调用随机码函数
randomNum()
// 定时器
let timer = setInterval(() => {
time--;
setVCodeTime(time);
// 一分钟后清空定时器
if (time === 0) {
clearInterval(timer);
setVCodeTime(60);
// 清空后 控制器再次变为true
setSendSwitch(true);
}
}, 1000);
}
return
};
return (
<div style={{ display: 'flex' }}>
<input />
<div
style={sendSwitch ? { color: 'blue' } : { color: '#9999', cursor: 'not-allowed', left: '250px' }}
onClick={sendCode}
>
发送验证码 {sendSwitch ? '' : `${VCodeTime}`}
</div>
</div>
);
};
export default Index;