js倒计时读秒

1.需求及分析

最近,接到一个接收手机验证码的功能,大体就是设置一个定时器,在每次执行的时候将秒数,逐个减去1,小于0的时候,清除定时器,然后完善一下功能,例如,加上一下状态的变化,总结下整体逻辑为:

开始进入,文字显示:获取验证码,点击后,开始倒计时显示,重新获取+秒数状态置为灰色,倒计时结束,只改变状态并重置秒数。

2.代码实现

// 时间的颜色状态
const [time_disbaled, set_time_disbaled]: [boolean, React.Dispatch<React.SetStateAction<boolean>>] = useState<boolean>(false);
// 是否是第一次进入页面(为了判断文字的显示)
const [init_status, set_init_status]: [boolean, React.Dispatch<React.SetStateAction<boolean>>] = useState<boolean>(true);
// 秒数
const [seconds, set_seconds]: [any, React.Dispatch<React.SetStateAction<any>>] = useState<any>(null);// 秒数不存在的时候,颜色需要立即置为可点击状态useEffect(() => {if (!seconds) {set_time_disbaled(false);}}, [seconds, set_time_disbaled])// 倒计时const countDown = useCallback(() => {let s = seconds || 5;// 这里为了第一时间把倒计时的值显示出来s && set_seconds(s);let siv = setInterval(() => {s -= 1;if (s < 0) {clearInterval(siv);} else {set_seconds(s);}}, 1000);}, [seconds, set_seconds])// 获取验证码const getVerifyCode = useCallback(() => {set_time_disbaled(true);countDown();init_status && set_init_status(false);}, [set_time_disbaled, set_init_status, init_status])// html
<Form.Item name='verifyCode'><Row align="middle" className="verifyCode"><Col sm={15}><Input size='large' placeholder={formatMessage({id: 'p_i_verify'})} /></Col><Col className={`time ${time_disbaled ? 'diabledStyle': ''}`}><Button disabled={time_disbaled} onClick={getVerifyCode}>{init_status ? <span>获取验证码</span>: <span>重新发送{seconds > 0 && `${seconds}s`}</span>}</Button></Col></Row></Form.Item>

下面这句代码很重要,如果不写的话,第一时间赋的值,不会显示,会直接进行减一的操作。

3.小结

写倒计时记住:

1)使用定时器,每秒减1,获取变量;

2)秒数需要写到小于0时停止,因为我们需要记录一下数据,如果1是最后一个,减1之后会执行定时器,则0秒不会记录在state数据中心,导致页面的问题;

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

C#实现倒计时的功能

软件界面&#xff1a; 软代码&#xff1a; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;na…

android studio高考倒计时,高考倒计时app排行榜

编辑推荐 时间管理倒计时 v1.3.0 大小&#xff1a;13.7MB 更新时间&#xff1a;21-04-14 下载 时间管理倒计时&#xff0c;一款专为小伙伴打造的手机时间规划工具&#xff0c;为小伙伴提供更强大的规划服务&#xff0c;在这里小伙伴可以自由规划自己的时间&#xff0c;为小伙伴…

VS2015+C#实现倒计时小程序

最近疫情严重&#xff0c;在家呆着也是呆着&#xff0c;于是就想学一下上位机的编写&#xff0c;权衡利弊之后&#xff0c;选择了C#语言&#xff0c;原因是据说它写出来的上位机比较小&#xff0c;不占内存。开发环境就用VS吧&#xff0c;用的人挺多的。好了&#xff0c;进入正…

C#之一个倒计时小应用程序的实现

只能开始计时&#xff0c;不能停止计时 代码&#xff1a; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.W…

易语言编写倒计时小程序

本人为编程爱好者&#xff0c;非专业人员。 最近工作中需要用到编写倒计时软件&#xff0c;故有此篇。 软件功能&#xff1a; 1.时间倒计时 2.倒计时会有一个透明放大的标签显示时间 3.各窗口可隐藏 以下为软件运行界面&#xff1a; 代码&#xff1a; .版本 2 .支持库 she…

DIY蓝牙小音响

PRE 我个人是比较喜欢手工做一些小东西&#xff0c;但是由于知识限制&#xff0c;我无法去制作一些复杂的东西&#xff0c;如果是一些简单的小玩具&#xff0c;如果我有能力做&#xff0c;我还是很乐意去做的。前段时间正好在看音响&#xff0c;我最后入手了一个便宜的EDIFIER…

树莓派系列二(语音识别)

树莓派的基本概念和安装系统在系列文章一中介绍了.这篇准备介绍一下语音识别. 一直想研究一下语音识别,用来做家庭物联网的控制入口,未来也许就是这样,讯飞的叮咚音响可以连接京东的物联平台,苹果的homekit平台,华为的平台暂时落后的有点多... 国内语音识别领域,我个人比较欣…

毕业设计 基于单片机的智能音响设计与实现 -物联网 嵌入式 stm32

文章目录 0 前言1 简介2 主要器件3 实现效果4 设计原理4.1 PAJ7620U2模块4.2 HC-05蓝牙模块4.3 JQ8900语音模块 5 部分核心代码6 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到…

两台电脑共享一个音响方法

两台电脑共享一个音响方法 由于某种原因&#xff0c;需要两个电脑使用同一个扬声器&#xff0c;现分享一种简单的方案 原理&#xff1a;通过主机的音频输入功能&#xff0c;将另一台电脑的音频接收过来并播放。 连线如下&#xff1a; PC2作为主设备&#xff0c;正常连接音响…

Spring IOC DI - 整合MyBatis

Spring IOC目录 主要内容Spring 框架介绍Spring 框架的优势(对比以前项目的缺点)Spring 框架引入历史发展框架学习三要素Spring 模块介绍 Spring IoC/DI - 引入IoC/DI 概念辨析使用IoC/DI的好处IoC/DI具体应用场景 Spring IoC/DI - 代码实现环境准备Spring 框架环境搭建创建Mav…

Spring框架——IOC、DI

本篇博客主要介绍Java中的IOC和DI&#xff0c;以及在String框架中的应用。首先&#xff0c;我们将对IOC和DI进行概念介绍&#xff0c;然后讲解它们的关系及在String框架中的应用&#xff0c;最后通过一个实例来展示它们的具体用法。 IOC和DI的概念介绍 IOC&#xff08;Invers…

叮咚!你点的Spring套餐来了!

儒猿技术团队最新出品&#xff1a; 《Spring顶尖高手进阶&#xff1a;互联网教育系统项目实战》 长按扫描下方二维码了解&#xff1a; 课程背景 在技术日新月异的今天&#xff0c;Spring作为Java主流开发框架&#xff0c;出道十多年仍然稳坐C位&#xff0c;经久不衰&#xff0c…

乐鑫Esp32学习之旅 17 全网首发,esp32 sdk直连京东微联·小京鱼·IoT开放平台,实现叮咚音响语音智能控制。

本系列博客学习由非官方人员 半颗心脏 潜心所力所写&#xff0c;仅仅做个人技术交流分享&#xff0c;不做任何商业用途。如有不对之处&#xff0c;请留言&#xff0c;本人及时更改。 1、 爬坑学习新旅程&#xff0c;虚拟机搭建esp32开发环境&#xff0c;打印 “Hellow World”。…

计时器setTimeout()函数、setInterval()函数

文章目录 &#x1f412;个人主页&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1f3c5;计时器setTimeout&#xff08;函数名&#xff0c;延迟时间&#xff09;结束计时器setTimeout &#x1f3c5;计时器setInterval&#xff08;函数名&#xff0c;延迟时间&a…

UGUI源码深度剖析

源码下载后 直接嵌入工程&#xff0c;删除引擎extension里的&#xff1b; 自制UI&#xff0c;在一个空场景中显示一个图片&#xff0c;当鼠标点击图片&#xff0c;执行操作。 gameobject &#xff1a; mesh meshfilter meshrender maintexture meshcollider camera ray

三星Note2 行货 水货 型号版本

来源&#xff1a;http://samsung.tgbus.com/201301/462040.shtml 三星Galaxy Note早期的用户定位&#xff0c;其实是喜欢大屏幕的商务男士&#xff0c;但是发售之后没想到&#xff0c;在市场中女性成为三星Galaxy Note的最大的购买群体。而比三星Galaxy Note屏幕更大的Galaxy N…

你的服务器安全吗?--服务器防渗透

1、概述 在本人所处的公司的服务器正式遭到黑客攻击之前&#xff0c;一直都以为 黑客 是个遥不可及的词&#xff0c;直到真正成为了受害者时&#xff0c;才猛然意识到安全的重要性。有一些基本经验和心得总结出来&#xff0c;和同行分享一下吧。 2、暴破手段 最粗暴的黑客行为…

数据通信——网络层(ACL)

引言 在网络中会区分三个区域&#xff1a;&#xff08;Trust&#xff09;内网&#xff0c;&#xff08;UnTrust&#xff09;外网&#xff0c;&#xff08;DM2&#xff09;非军事化区域 防火墙在网络中可以阻止DM2对Trust的访问。同理&#xff0c;从Trust到UnTrust或者UnTrust到…

微信小程序_23,分包

什么是分包: 分包指的是把一个完整的小程序项目,按照需求划分为不同的子包,在构建时,打包成不同的分包,用户在使用时按需进行加载 分包的好处: 可以优化小程序首次启动的下载时间在多团队共同开发时可以更好的解耦协作 分包前后项目的构成&#xff1a; 分包后小程序项目由1个主…