react倒计时功能

 

目录

类组件写法

函数组件写法:

 demo: 手机获取验证码登录(验证码60秒倒计时)


react倒计时5 秒

React中的倒计时可以通过使用setInterval()函数来实现。下面是一个示例代码:

类组件写法

import React from 'react';
import { Button } from 'antd';class A extends React.PureComponent {constructor(props){super(props)this.state = {count: 0, // 初始值0}}clickCountTime = () => {this.setState({count: 5, // 设置一个5秒倒计时 })let timer = null;timer = setInterval(() => {this.setState({count: this.state.count - 1, // 倒计时减1秒 }, () => {if(this.state.count < 1) {clearInterval(timer); // 清除定时器}})}, 1000)}render () {const { count } = this.state;return (<Button type='primary'style={{ width:'85px' }}disabled={!!count} // 倒计时期间不可编辑,如果count=0,0是false,!0=true, !!0=falseonClick={this.clickCountTime}>{count === 0 ? '获取验证码' : `${count}秒后重试`}</Button>)}}export default A

 

 react倒计时60 秒

React中的倒计时可以通过使用setInterval()函数来实现。下面是一个示例代码:

函数组件写法:

        设置一个button按钮给点击事件,按下后状态变为disabled,开始定时器每秒减一,当时间为0时,清除定时器,重置会原来的状态。

import React, { useState, useEffect, useCallback, useRef } from 'react';const CountDown () {const intervalRef = useRef(null); // 使用useRef来存储计数器的值,并在setInterval函数中访问它const [count, setCount] = useState(0); // 初始值count=0// 组件卸载时清除计时器:设置清除定时器,避免count还未为0时,组件已被UnmountuseEffect(() => {return () => {clearInterval(intervalRef.current);};}, []);// 监听count的变化 useEffect(() => {if (count === 59) {intervalRef.current = setInterval(() => {setCount((preCount) => preCount - 1);}, 1000);} else if (count === 0) {clearInterval(intervalRef.current);}}, [count]);// 点击事件const onGetCaptcha = useCallback(() => {setCount(59); // 从59秒开始倒计时}, []);return (<Button type='button' disabled={!!count} onClick={onGetCaptcha}>{count ? `${count} s` : '获取验证码'}</Button>);
};export default CountDown;

 demo: 手机获取验证码登录(验证码60秒倒计时)

import { Row, Col, Input, Button } from "antd"
import { useState, useRef, useEffect } from "react"const InputGroup = Input.Group;const App = () => {const [phone, setPhone] = useState(null); // 定义初始手机号const [count, setCount] = useState(0) // 默认0秒const timerRef = useRef(null) // 使用useRef设置一个倒计时器,这样我就可以防止重新渲染// 监听count的变化 useEffect(() => {if (count === 59) {intervalRef.current = setInterval(() => {setCount((preCount) => preCount - 1);}, 1000);} else if (count === 0) {clearInterval(intervalRef.current);}}, [count]); // count改变就会执行// 获取验证码const getInfo = () => {const reg= /^1[3456789]\d{9}$/;if(phone !== null || phone !== underfine) {if(!reg.test(phone )) { // 若手机号不符合要求,倒计时不进行setCount(0);message.error('输入的手机号不正确!')return false;} else {// 调接口,传给后台,获取后台的status状态axios.post('', { phone }).then(res => {if(status.success === false) {setCount(0);message.error('发送失败!')} else {message.success ('发送成功!')setCount(59);}})}}// 获取手机号输入框里的值    const getValue = (e) => {setPhone(e.target.value);}return (<div><p>手机号</p><Row><Col span={8}><Input placeholder='请输入手机号' onBlur={e => getValue(e)} allowClear /></Cow></Row><p>短信验证码</p><Row><Col span={8}><InputGroup compact><Input placeholder='请输入验证码' style={{ width: '40%'}} allowClear /><Button onClick={getInfo} disabled={!!count}>{count === 0 ? '获取验证码': `${count}秒后重发`}</Button></InputGroup></Cow></Row></div>)
}export default App

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/707983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Docker】狂神说

图片后补 官网&#xff1a; https://www.docker.com/ Docker概述 Docker为什么出现 原因&#xff1a;环境配置不能跨平台 方案 传统方式&#xff1a;jar&#xff08;开发人员&#xff09; 部署&#xff08;运维人员&#xff09; 解决方式&#xff1a;开发打包上线一套流程 …

推荐几个css+js特效网站

CodePen&#xff08;https://codepen.io/&#xff09;&#xff1a;CodePen不仅仅是一个CSS编辑器&#xff0c;它也是一个广受欢迎的JavaScript特效展示平台。你可以在CodePen上浏览和搜索其他开发者创建的各种JavaScript特效&#xff0c;从而获得灵感和学习如何实现不同的效果。…

【算法集训】基础算法:基础排序 - 选择排序

从上一学期期末考完之后就鸽了&#xff0c;真的惭愧&#xff0c;还想着期末考完就开始呢&#xff0c;结果考驾照完了后又有学校项目要忙活。终于是拖到开学了哈哈&#xff0c;虽然现在事情也比较多&#xff0c;但是总归是要开始的&#xff0c;不然马上就要拖延症晚期了&#xf…

设计模式:结构型模式

1. 适配器模式 (Adapter Pattern) 适配器模式是一种结构型设计模式&#xff0c;旨在将一个类的接口转换成客户端所期待的另一个接口&#xff0c;从而使原本由于接口不兼容而无法一起工作的类能够协同工作。适配器模式通常用于需要复用现有类但其接口与要求不匹配的情况。 1.1…

Qt SQLite的创建和使用

重点&#xff1a; 1.SQLite创建数据库内容方法 链接&#xff1a;SQLite Expert Personal的简单使用-CSDN博客 2.和数据库进行链接方法 QSqlDatabase DB; //数据库连接bool MainWindow::openDatabase(QString aFile) {DBQSqlDatabase::addDatabase("QSQLITE"); /…

使用uniapp开发时自定义tabbar

预览图&#xff1a; 一、配置page.jsong中的tabbar&#xff08;这一步是必须的&#xff0c;因为我们在使用uni.switchTab()时必须要用到&#xff09; "tabBar": {"list": [{"pagePath": "pages/index/index","iconPath": &…

java回顾总结--代理模式

目录 一、代理模式1.1 静态代理示例 1.2 动态代理示例 二、总结 一、代理模式 1.1 静态代理 代理模式给某一个对象提供一个代理对象&#xff0c;并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。比如你按照小卡片上的电话打过去寻求服务&#…

C# 学习第四弹——字符串

一、char类型的使用 字符使用单引号&#xff0c;单个字符 转义字符是一种特殊的字符变量&#xff0c;以反斜线开头&#xff0c;后跟一个或多个字符。 输出多级目录可以使用 二、字符串的声明和初始化 1、引用字符串常量 引用字符串常量初始化——字符使用单引号&#xff0…

加密与安全_探索常用编码算法

文章目录 概述什么是编码编码分类ASCII码 &#xff08;最多只能有128个字符&#xff09;Unicode &#xff08;用于表示世界上几乎所有的文字和符号&#xff09;URL编码 &#xff08;解决服务器只能识别ASCII字符的问题&#xff09;实现&#xff1a;编码_URLEncoder实现&#xf…

K8S常用kubectl命令汇总(持续更新中)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

【Prometheus】基于Altertmanager发送告警到多个接收方、监控各种服务、pushgateway

基于Altertmanager发送报警到多个接收方 一、配置alertmanager-发送告警到qq邮箱1.1、告警流程1.2、告警设置【1】邮箱配置【2】告警规则配置【3】 部署prometheus【4】部署service 二、配置alertmanager-发送告警到钉钉三、配置alertmanager-发送告警到企业微信3.1、注册企业微…

量子算法入门—4.量子比特与量子门(1)

1.量子比特 经典比特和量子比特 经典比特只有0、1两种取值&#xff0c;非黑即白&#xff0c;有n位即 2 n 2^n 2n种可能量子比特使用0、1的量子态描述量子比特的状态&#xff0c;可以通过线性组合形成新的量子态&#xff0c;就像光谱可以调节成分 引入线代记法&#xff0c;0、…

ARK:《BIG IDEAS 2024》

Cathie Wood所带领的方舟投资&#xff08;ARK&#xff09;发布了年度重磅研究报告《BIG IDEAS 2024》&#xff0c;该报告指出人工智能、公共区块链、多组学测序、能源存储和机器人技术这五大板块的融合将带来全球经济活动的改变。 这五个创新平台正在融合并定义这个技术时代&am…

92. 递归实现指数型枚举 刷题笔记

思路 dfs 考虑选或者不选每个位置 用0表示未考虑 1表示选 2表示不选 用u表示搜索状态 u>n时 已经搜到底层了 需要输出当前方案 遍历 如果选了则输出 #include<iostream> using namespace std; int n; const int N16; int st[N]; void dfs(int u){ //u来记…

Git自动忽略dll文件的问题

检查了半天发现是sourcetreee的全局忽略文件导致&#xff0c; 从里面删除dll即可。 我是干脆直接删了全局忽略&#xff0c;太恶心了&#xff0c;如下&#xff1a; #ignore thumbnails created by windows Thumbs.db #Ignore files build by Visual Studio *.exe .vsconfig .s…

fastAdmin表格列表的功能

更多文章&#xff0c;请关注&#xff1a;fastAdmin后台功能详解 | 夜空中最亮的星 FastAdmin是一款基于ThinkPHP5Bootstrap的极速后台开发框架。优点见开发文档 介绍 - FastAdmin框架文档 - FastAdmin开发文档 在这里上传几张优秀的快速入门图: 一张图解析FastAdmin中的表格列…

Linux网络编程(四-TCP协议)

目录 一、TCP概念 二、TCP的首部格式 三、TCP可靠传输机制 3.1 确认应答机制 3.2 超时重传机制 3.3 连接管理 3.3.1 三次握手 3.3.2 四次挥手 3.4 流量控制 3.5 拥塞控制 四、TCP效率机制 4.1 滑动窗口 4.2 重发控制 4.3 延迟应答 4.4 捎带应答 五、TCP的…

大数据分布式计算工具Spark实战讲解(数据输入实战)

Python数据容器转RDD对象 PySpark支持通过SparkContext对象的parallelize成员方法&#xff0c;将&#xff1a; - list - tuple - set - dict - str 转换为PySpark的RDD对象 注意&#xff1a; •字符串会被拆分出1个个的字符&#xff0c;存入RDD对象 •字典仅有key会被存入…

问题:输入git命令出现END命令,按住ctrl+c都没有不能退出,只能输入q才能退出

当输入git命令时&#xff0c;例如git log&#xff0c;会直接出现END这种黑框&#xff0c;按住ctrlc都不能退出&#xff0c;只能通过输入q才能退出的情况 解决方法&#xff1a; git config --global core.pager

Open Harmony开发之分布式账本

简介 Demo基于Open Harmony系统使用ETS语言进行编写&#xff0c;本Demo主要通过设备认证、分布式拉起、分布式数据管理等功能来实现。 应用效果 设备认证,获取同一个局域网内的设备ID&#xff0c;并拉起应用 添加数据并在另一台设备显示该数据 开发步骤 1.新建Openharmony…