umi框架编写简单的验证码登录

2023-11-05

首先我们需要先创建一个layouts的文件夹,用来存储跳转动画的文件,layouts的文件夹和pages同级。
然后在pages中创建一个login文件夹用来存储登录文件,然后再里面创建login和index文件开始编写代码。
接下来就是废话不多说,上代码

import React, { useState, useEffect, useRef } from 'react'
import './index.less'
import { history } from 'umi'
import { NavBar, AutoCenter, Input, Form, Button,Toast } from 'antd-mobile'
let timer;
export default function Login() {
  const codet = useRef(null);
  const [name, setname] = useState('')
  const [phone, setphone] = useState('')
  const [password, setPass] = useState('')
  const [time, setTime] = useState(5);
  const [disabled, setDisabled] = useState(true)
  const [btnContent, setBtnContent] = useState('获取验证码');
  const [btnDisabled, setBtnDisabled] = useState(false);
  const [sstr, setstr] = useState('');
  const [phonecode, setcode] = useState('');
  function usenum() {
    let phoneReg = /^[1][3,4,5,7,8,9][0-9]{9}$/;
    if (name.length==0) {
        Toast.show({
            icon: 'fail',
            content: '请输入姓名',
        })
    }else
    if (!phoneReg.test(phone)) {
        Toast.show({
            icon: 'fail',
            content: '手机号错误',
        })
    }else
        if (phonecode.length == 0) {
        Toast.show({
            icon: 'fail',
            content: '请输入验证码',
        })
    }
        else
            if (phonecode != sstr) {
                Toast.show({
                    icon: 'fail',
                    content: '验证码错误',
                })
            }
    else {
        Toast.show({
            icon: 'success',
            content: '登录成功',
        })
        history.push({ pathname: '/home', query: { name } })
    }
}

useEffect(() => {
    console.log(name);
    console.log(phone);
    console.log(password);
    if (name.length > 0 & phone.length > 0 & password.length > 0) {
        console.log(2856725468457);
        setDisabled(false)
    } else {
        setDisabled(true)
    }
    return () => {
        setDisabled(false)
    };
}, [name, phone, password]);

useEffect(() => {
    clearInterval(timer);
    return () => clearInterval(timer);
}, []);

useEffect(() => {
    if (time > 0 && time < 60) {
        setBtnContent(`${time}s后重发`);
    } else {
        clearInterval(timer);
        setBtnDisabled(false);
        setTime(60);
    }
}, [time]);


const getCaptcha = () => {
    let phoneReg = /^[1][3,4,5,7,8,9][0-9]{9}$/;
    if (!phoneReg.test(phone)) {
        Toast.show({
            icon: 'fail',
            content: '请输入正确的手机号',
        });
    } else {
        if (!phone) return;
        timer = setInterval(() => setTime((pre) => pre - 1), 1000);
        setBtnDisabled(true);
        let wer = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
        let sert = '';
        for (let e = 0; e < 6; e++) {
            sert += wer[Math.ceil(Math.random() * wer.length - 1)];
        }
        // setcode(sert);
        setstr(sert);
        Toast.show({
            content: '验证码为' + sert,
        });
    }
};
  return (
    <div>
      <NavBar back={null} backArrow={false}>手机号登录</NavBar>
      <AutoCenter>
        <Form className='autoform' layout='horizontal'
          footer={
            <Button onClick={usenum.bind(this)} block type='submit' color='primary' size='large'>
              提交
            </Button>
          }>
          <Form.Item label='姓名' name='name'
            rules={[{ message: '姓名不能为空' }]}>
            <Input placeholder='请输入姓名' value={name}
              onChange={val => {
                setname(val)
              }} clearable />
          </Form.Item>
          <Form.Item label='手机号'
            rules={[{ message: '手机号不能为空' }]}
            name='phone'>
            <Input placeholder='请输入手机号' value={phone}
              onChange={val => {
                setphone(val)

              }}
              clearable />

          </Form.Item>
          <Form.Item label="短信验证码"
            rules={[{ message: '验证码不能为空' }]}
            extra={
              <Button
                color="warning"
                disabled={btnDisabled}
                onClick={getCaptcha}
              >
                {!btnDisabled ? '获取验证码' : `${time}s后重发`}
              </Button>
            }>
            <Input
              placeholder="请输入验证码"
              value={phonecode}
              ref={codet}
              onChange={(val) => {
                setcode(val);
              }}
            />
          </Form.Item>
        </Form>
      </AutoCenter>
    </div>
  )
}

然后就是样式的代码

.adm-nav-bar {
    --height: 45px;
    --border-bottom: none;
    display: flex;
    align-items: center;
    height: var(--height);
    border-bottom: var(--border-bottom);
    padding: 0 12px;
    white-space: nowrap;
    background-color: darkorchid;
    color: white;
    font-size: 15px;
}

.adm-auto-center {
    display: flex;
    justify-content: center;
    margin-top: 50%;
}

.adm-button .adm-button-warning .adm-button-shape-default {
    --text-color: var(--adm-color-white);
    --background-color: #8f8c8a;
    /* --border-color: var(--color); */
}

.adm-button-warning {
    --color: #dbd7d3;
}

.adm-form {
    --border-inner: solid 1px var(--adm-border-color);
    --border-top: solid 1px var(--adm-border-color);
    --border-bottom: solid 1px var(--adm-border-color);
    --prefix-width: 6.8em;
    ---border-inner: var(--border-inner);
    ---border-top: var(--border-top);
    ---border-bottom: var(--border-bottom);
    ---prefix-width: var(--prefix-width);
    margin-top: 50%;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

umi框架编写简单的验证码登录 的相关文章

  • 了解设置 JQuery 变量

    了解设置 JQuery 变量 最近 我通过在 StackOverflow 上遇到的另一个问题寻找帮助 了解到如何设置 JQuery 变量 如下所示 您可以通过简单地调用变量来创建输入字段 并且锚变量似乎也定义了样式 var clicked
  • 从数据 URI 解码 QR 码

    我尝试从数据 uri 中解码二维码 var dataUri data image gif base64 R0lGODdh9gD2AIAAAAAAAP ywAAAAA9gD2AAAC decodeQrCode dataUri cb 我已经尝试
  • 尝试将布尔 C# 变量传递给 javascript 变量并将其设置为 true

    在我的 aspx 页面中 我将布尔变量 C 传递给需要布尔类型的 javascript 函数 但遇到了问题 但是 C 变量返回 True 而 javascript 不喜欢大写 myjavascript 如果我将 c 变量转换为字符串 那么我
  • 我想检查 $('#td1').text() === "x" 是否?

    我想检查innerHtml是否有X或O 所以我不能再次添加任何其他东西 但它不起作用 添加检查代码后它就停止了 我在这里尝试做一个简单的XO游戏来更熟悉javascript和jquery 我也不确定是否可以用 jQuery 做到这一点
  • 使用 jQuery/JS 打开时使
    标签的内容具有动画效果

    我只想要 HTML5 的内容details标记为 滑行 动画打开 而不是仅仅弹出打开 立即出现 这可以用 jQuery Javascript 实现吗 Fiddle http jsfiddle net 9h4Hq HTML
  • 检查 JavaScript 字符串是否为 URL

    JavaScript 有没有办法检查字符串是否是 URL 正则表达式被排除在外 因为 URL 很可能是这样写的stackoverflow 也就是说它可能没有 com www or http 如果你想检查一个字符串是否是有效的 HTTP UR
  • 如何防止 Iframe 在与浏览器交互后弄乱浏览器的历史记录?

    因此 就我而言 我使用 Iframe 将 Grafana 附加到我的页面 这为我提供了漂亮且易于使用的图表 可以注意到 每次在图表上进行放大或缩小 使用鼠标单击 交互后 Grafana 的 Iframe 都会在我的 Angular 页面上触
  • 在 Wordpress 站点中进行 AJAX 调用时出现问题

    我在使用 Wordpress 站点功能的 AJAX 部分时遇到了一些问题 该功能接受在表单上输入的邮政编码 使用 PHP 函数来查找邮政编码是否引用特定位置并返回到该位置的永久链接 我的第一个问题是关于我构建的表单 现在我的表单操作是空白的
  • 如何使输入字段和提交按钮变灰

    我想变灰这两件事 http doorsplit heroku com 歌曲输入字段和提交按钮 直到用户输入艺术家 有没有一种简单的方法可以通过 JQuery 来做到这一点 艺术家输入字段的id是 request artist 你可以这样做
  • 提交表单并重定向页面

    我在 SO 上看到了很多与此相关的其他问题 但没有一个对我有用 我正在尝试提交POST表单 然后将用户重定向到另一个页面 但我无法同时实现这两种情况 我可以获取重定向或帖子 但不能同时获取两者 这是我现在所拥有的
  • Javascript 数组到 VBScript

    我有一个使用 Javascript 构建的对象数组 我需要使用 VBScript 读取它 如下例所示 我找不到在 VbScript 代码中循环遍历数组的方法myArray object 这个例子是我的问题的简化 我无法更改页面的默认语言 这
  • 为什么在 Internet Explorer 中访问 localStorage 对象会引发错误?

    我正在解决一个客户端问题 Modernizr 意外地没有检测到对localStorageInternet Explorer 9 中的对象 我的页面正确使用 HTML 5 文档类型 并且开发人员工具报告该页面具有 IE9 的浏览器模式和 IE
  • 如何在类似控制台的环境中运行 JavaScript?

    我正在尝试遵循这里的示例 http eloquentjavascript net chapter2 html http eloquentjavascript net chapter2 html and print blah 在浏览器中运行时
  • 模块构建失败(来自 ./node_modules/babel-loader/lib/index.js)Vue Js

    我从 GitHub 下载了一个我和我的朋友正在开发的项目 但是当我尝试运行时 npm run serve 我收到这个错误 src main js 中的错误 Module build failed from node modules babe
  • 在 vue.js 中访问数组对象属性

    给定以下数组vue js packageMaps Object packageMap 0 Object Id 16 PackageType flag list ProductCode F BannerBase packageMap 1 Ob
  • 摆脱node-jsx

    在我的 NodeJS 应用程序的路由器中 我想渲染一个 React 应用程序 由于它没有被浏览器化 并且已反应 因此它返回unexpected token lt 构建时出错 我发现如果我require node jsx install 它不
  • Javascript 纪元时间(以天为单位)

    我需要以天为单位的纪元时间 迄今为止 我已经看到过有关如何翻译它的帖子 但几天后就没有了 我对纪元时间很不好 我怎么能得到这个 我需要以天为单位的纪元时间 我将解释为您想要自纪元以来的天数 纪元本身是第 0 天 或第 1 天的开始 无论您如
  • JQuery 图像上传不适用于未来的活动

    我希望我的用户可以通过帖子上传图像 因此 每个回复表单都有一个上传表单 用户可以通过单击上传按钮上传图像 然后单击提交来提交帖子 现在我的上传表单可以上传第一个回复的图像 但第二个回复的上传不起作用 我的提交过程 Ajax 在 php 提交
  • 如何仅在最后一个
  • 处给出透明六边形角度?
  • 我必须制作这样的菜单 替代文本 http shup com Shup 330421 1104422739 My Desktop png http shup com Shup 330421 1104422739 My Desktop png
  • 使用 Ajax 请求作为源数据的 Jquery 自动完成搜索

    我想做的事 我想使用 jquery 自动完成函数创建一个输入文本字段 该函数从跨域curl 请求获取源数据 结果应该与此示例完全相同 CSS 在这里并不重要 http abload de img jquerydblf5 png http a

随机推荐

  • Android使用SharedPreferences(sp)存储基本数据类型、List集合、Map集合、对象都在这了

    基于一些小伙伴说在取出对象的时候出现null 这个问题可能是因为你的对象没有序列化的原因 如果存在内部类的也需要进行序列化 看下面的例子 public class Test implements Serializable 内部类 publi
  • c语言蛇形填充数组,蛇形

    题目描述 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形 例如 当输入5时 应该输出的三角形为 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11 请注意本题含有多组样例输入 输入描述 输入正整数N N不大于10
  • vue中使用简单的回调函数

    使用场景 比如 多个新增接口一样 只是新增之后调用的列表接口不一致 this getTalkBy 列表接口的回调 调用 this getAddTalkLike this getTalkBy 新增接口 getAddTalkLike callb
  • 大神总结的图像处理学习路线

    图像处理 第一阶段 熟悉图像算法 推荐中科院研究生院刘定生老师的数字图像处理与分析 视频 配套的书籍 冈萨雷斯版数字图像处理 同时用matlab软件 仿真每一个图像算法案例 推荐 matlab宝典 第二阶段 认真学习C 推荐 C Prime
  • 基于Smack3.0.4+ Openfire3.10.2开发之Android 客户端之四

    我们在之前依次介绍openfire部署以及smack常用API的使用 这一节中我们着力介绍如何基于asmack开发一个Android的客户端 本篇的重点在实践 讲解和原理环节 大家可以参考前面我所发布的OpenFire和Smack的相关文章
  • 10.JavaWeb-logback日志

    1 日志的概念 日志是用于记录软件系统运行时状态和事件的重要工具 在软件开发中 日志是一种常用的调试和故障排查手段 同时也可以用于性能分析 用户行为追踪和系统监控等方面 1 1日志特点 灵活性 可以根据需要配置日志的级别和输出目标 方便在不
  • MCU和DSP区别

    1 概述 随着处理器技术的不断发展 目前来看CPU Central Processing Unit 逐渐出现三种分支 分别是DSP Digital Signal Processing Processor 数字信号处理 以及MCU Micro
  • 第四天笔记

    1 盒子模型 内边距 应用于所有边 padding 1em 上边下边 左边右边 padding 5 10 上边 左边右边 下边 padding 1em 2em 2em 上边 右边 下边 左边 padding 5px 1em 0 2em 全局
  • JavaScript给URL追加参数

    代码 appendQuery url key value gt var options key if typeof options string options options key value options param options
  • 傅里叶变换在图像处理中的应用

    目录 基本概念 超详细的图像中傅里叶理解及常用模板 请参考 https blog csdn net m0 37264397 article details 70186390 应用一 使用C opencv对图像进行傅里叶变换 再根据频谱图对原
  • STM32----IIC详解

    一 IIC简介 1 IIC总线概述 IIC总线是飞利浦公司研发的两线制串行通信总线 IIC两线制包括 串行时钟线 SCL 和串行数据线 SDA 串行时钟线 SCL 只能由主器件控制 串行数据线 SDA 实现双向数据传输 IIC通信属于同步
  • 在IE中使用ActiveX控件,需要使用HTML中的标志是

    在 中使用ActiveX控件 需要使用HTML中的标志是
  • 【C语言】二分查找(含图解)

    文章目录 1 二分查找思想 2 代码实现 2 1 未封装函数 2 2 封装函数 使用while循环 2 3 封装函数 使用递归 1 二分查找思想 二分法 二分查找算法是一种在有序数组中查找某一特定元素的搜索算法 其思想就是不断地将有序查找表
  • 5.2 可变参数

    5 2 可变参数 Lua函数可以接受可变数目的参数 和C语言类似在函数参数列表中使用三点 表示函数有可变的参数 Lua将函数的参数放在一个叫arg的表中 除了参数以外 arg表中还有一个域n表示参数的个数 例如 我们可以重写print函数
  • JAVA根据模板生成PDF文件并导出

    JAVA根据模板生成并导出PDF 实现功能 根据模板生成PDF文件 模板文件参数可配 可手动修改 一 PDF导出效果 先看一下导出的demo文件 具体样式可手动修改 下图为demo pdf ftl导出PDF文件 下图为list pdf ft
  • 图像分割之Unet解析及实现代码

    Unet解析及实现代码 论文连接 https arxiv org pdf 1505 04597 pdf 源码连接 https github com FENGShuanglang unet 图像分割 Unet网络结构详解 Unet网络结构 o
  • c++ auto关键字使用

    C 11 auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型 类似的关键字还有decltype 举个例子 int a 10 auto au a a 自动类型推断 au a为int类型 cout lt lt typei
  • 在 NLP 中训练 Unigram 标记器

    介绍 单个标记称为 unigram Unigram 标记器是一种只需要一个单词来推断单词的词性标记器类型 它有一个单词的上下文 NLTK库为我们提供了UnigramTagger 并从NgramTagger继承而来 在本文中 让我们了解 Un
  • UDP实现点对点聊天(多线程)-C语言

    UDP实现点对点聊天 多线程 服务器端 操作步骤 1 编译 gcc UDPM c lws2 32 lmycon lwinmm o UDPM exe 2 运行 UDPM include
  • umi框架编写简单的验证码登录

    首先我们需要先创建一个layouts的文件夹 用来存储跳转动画的文件 layouts的文件夹和pages同级 然后在pages中创建一个login文件夹用来存储登录文件 然后再里面创建login和index文件开始编写代码 接下来就是废话不