react-Hook倒计时hook

news/2024/10/22 13:44:25/

我们平常注册账号的时候会有发送验证码的需求,为了减少过多的请求,我们一般限制60s发一次,这个需求也很平常,但在react中之前我并没有写过,就简单的研究了一下,把该需求封装成了一个hook

代码

import { useCallback, useEffect, useRef, useState } from "react";
//initCount是倒计时时长,默认是10s,callBack是开始执行的回调函数,endBack是结束时执行的函数
export function useCountDown(initCount = 10,callBack = () => {},endBack = () => {}
) {
//初始化定时器idconst timeId = useRef<{ id: number }>({ id: 0 });//初始化倒计时const [count, setCount] = useState(initCount);//初始化是否禁用const [isdisable, setIsdisable] = useState(false);//开始,执行该函数之后会开启倒计时const start = () => {setCount(initCount);setIsdisable(true);timeId.current.id = window.setInterval(() => {setCount((count) => count - 1);}, 1000);};//   首先清除定时器useEffect(() => window.clearInterval(timeId.current.id), []);//   判断是否需要清除useEffect(() => {if (count !== initCount || isdisable) {callBack();}if (count === 0) {clearInterval(timeId.current.id);setCount(initCount);endBack();setIsdisable(false);}}, [callBack, count, initCount, endBack, isdisable]);//对外暴露三个属性,开始执行函数,当前倒计时时间,是否禁用return { start, count, isdisable };
}

使用

import React, { useState } from 'react'
import { useCountDown } from '../../hooks/utils';
import { Button } from 'antd';export default function text() {const [codeMessage, setCodeMessage] = useState("获取验证码");const { start, count, isdisable } = useCountDown(60,() => {setCodeMessage(`${count}s后重新获取`);},() => {setCodeMessage("获取验证码");});function getCode() {start();}return (<div><ButtononClick={getCode}disabled={isdisable}style={{ marginLeft: "10px" }}>{codeMessage}</Button></div>)
}

以上就是我封装的倒计时hook。


http://www.ppmy.cn/news/313318.html

相关文章

异常数据检测 | Python实现k-means时间序列异常数据检测

文章目录 文章概述模型描述源码分享学习小结文章概述 异常数据检测 | Python实现k-means时间序列异常数据检测 模型描述 k-means是一种广泛使用的聚类算法。它创建了k个具有相似特性的数据组。不属于这些组的数据实例可能会被标记为异常。在我们开始k-means聚类之前,我们使用e…

最经典游戏贪吃蛇代码(高仿),完美复原原游戏,好玩到停不下来

直接上代码 #include<iostream> #include<windows.h> #include<time.h> #include<conio.h> #define H 22 #define W 22 using namespace std;class chessboard { public:char qp[H][W];int i,j,x1,y1;chessboard();void food();void prt(int grade,in…

2023网络安全工程师面试题汇总(附答案)

又到了毕业季&#xff0c;大四的漂亮学姐即将下架&#xff0c;大一的小学妹还在来的路上&#xff0c;每逢这时候我心中总是有些小惆怅和小激动…… 作为学长&#xff0c;还是要给这些马上要初出茅庐的学弟学妹们&#xff0c;说说走出校园、走向职场要注意哪些方面。 走出校园后…

SQL开源替代品,诞生了

发明 SQL 的初衷之一显然是为了降低人们实施数据查询计算的难度。SQL 中用了不少类英语的词汇和语法&#xff0c;这是希望非技术人员也能掌握。确实&#xff0c;简单的 SQL 可以当作英语阅读&#xff0c;即使没有程序设计经验的人也能运用。 然而&#xff0c;面对稍稍复杂的查…

中断重启后出现:Error while reading checkpoint file kafka消费者无法断点消费、分区消费(读取offset恢复文件IO异常)

服务器强制重启后&#xff0c;有时Kafka等会保存checkpoint&#xff0c;但是断点信息出现错误。启动Kafka服务时&#xff0c;出现如下错误&#xff1a; ERROR Error while reading checkpoint file /home/kafka-2.3.1/kafka-logs/recovery-point-offset-checkpoint (kafka.ser…

linux(信号结尾)

目录&#xff1a; 1.可重入函数 2.volatile关键字 3.SIGCHLD信号 -------------------------------------------------------------------------------------------------------------------------------- 1.可重入函数----------用来描述一个函数的特点的 1.在单进程当中也存…

Android滴滴路由框架DRouter原理解析

作者&#xff1a;linversion 前言 最近的一个新项目使用了Clean Architecture模块化MVVM架构&#xff0c;将首页每个tab对应的功能都放到单独的模块且不相互依赖&#xff0c;这时就有了模块间页面跳转的问题&#xff0c;经过一番研究选择了滴滴的DRouter&#xff0c;因为其出色…

友华PT925E,电信天翼网关3.0,光猫超级密码获取最简便方式

第一步&#xff1a;核实是否为电信天翼网关3.0&#xff0c;如清楚&#xff0c;请直接跳至第三步 浏览器登录http://192.168.1.1/ 登录后应为下图第二步&#xff1a;使用useradmin账号 和光猫背后的密码登录后&#xff0c;界面显示为下图&#xff0c;即为电信天翼网关3.0 第三…