前端react验证码6位随机码(大小写字母+数字)

简介: 前端react验证码6位随机码(大小写字母+数字)

前端react验证码6位随机码(大小写字母+数字)

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;
相关文章
|
1月前
|
前端开发 JavaScript 开发者
颠覆传统:React框架如何引领前端开发的革命性变革
【10月更文挑战第32天】本文以问答形式探讨了React框架的特性和应用。React是一款由Facebook推出的JavaScript库,以其虚拟DOM机制和组件化设计,成为构建高性能单页面应用的理想选择。文章介绍了如何开始一个React项目、组件化思想的体现、性能优化方法、表单处理及路由实现等内容,帮助开发者更好地理解和使用React。
77 9
|
25天前
|
监控 前端开发 数据可视化
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
@icraft/player-react 是 iCraft Editor 推出的 React 组件库,旨在简化3D数字孪生场景的前端集成。它支持零配置快速接入、自定义插件、丰富的事件和方法、动画控制及实时数据接入,帮助开发者轻松实现3D场景与React项目的无缝融合。
94 8
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
|
28天前
|
前端开发 JavaScript 开发者
使用React和Redux构建高效的前端应用
使用React和Redux构建高效的前端应用
33 1
|
1月前
|
前端开发 JavaScript Android开发
前端框架趋势:React Native在跨平台开发中的优势与挑战
【10月更文挑战第27天】React Native 是跨平台开发领域的佼佼者,凭借其独特的跨平台能力和高效的开发体验,成为许多开发者的首选。本文探讨了 React Native 的优势与挑战,包括跨平台开发能力、原生组件渲染、性能优化及调试复杂性等问题,并通过代码示例展示了其实际应用。
63 2
|
1月前
|
前端开发 JavaScript 开发者
React与Vue:前端框架的巅峰对决与选择策略
【10月更文挑战第23天】React与Vue:前端框架的巅峰对决与选择策略
|
1月前
|
前端开发 JavaScript 开发者
“揭秘React Hooks的神秘面纱:如何掌握这些改变游戏规则的超能力以打造无敌前端应用”
【10月更文挑战第25天】React Hooks 自 2018 年推出以来,已成为 React 功能组件的重要组成部分。本文全面解析了 React Hooks 的核心概念,包括 `useState` 和 `useEffect` 的使用方法,并提供了最佳实践,如避免过度使用 Hooks、保持 Hooks 调用顺序一致、使用 `useReducer` 管理复杂状态逻辑、自定义 Hooks 封装复用逻辑等,帮助开发者更高效地使用 Hooks,构建健壮且易于维护的 React 应用。
35 2
|
1月前
|
前端开发 JavaScript 数据管理
React与Vue:两大前端框架的较量与选择策略
【10月更文挑战第23天】React与Vue:两大前端框架的较量与选择策略
|
23天前
|
前端开发 JavaScript 算法
探索现代前端框架——React 的性能优化策略
探索现代前端框架——React 的性能优化策略
20 0
|
23天前
|
前端开发 JavaScript API
探索现代前端框架——React 的性能优化策略
探索现代前端框架——React 的性能优化策略
26 0
|
1月前
|
前端开发 Android开发 开发者
前端框架趋势:React Native在跨平台开发中的优势与挑战
【10月更文挑战第26天】近年来,React Native凭借其跨平台开发能力在移动应用开发领域迅速崛起。本文将探讨React Native的优势与挑战,并通过示例代码展示其应用实践。React Native允许开发者使用同一套代码库同时构建iOS和Android应用,提高开发效率,降低维护成本。它具备接近原生应用的性能和用户体验,但也面临平台差异、原生功能支持和第三方库兼容性等挑战。
43 0