react-Hook倒计时hook

news/2024/7/15 18:43:21 标签: react.js, 前端, 前端框架

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

代码

import { useCallback, useEffect, useRef, useState } from "react";
//initCount是倒计时时长,默认是10s,callBack是开始执行的回调函数,endBack是结束时执行的函数
export function useCountDown(
  initCount = 10,
  callBack = () => {},
  endBack = () => {}
) {
//初始化定时器id
  const 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>
            <Button
                onClick={getCode}
                disabled={isdisable}
                style={{ marginLeft: "10px" }}
            >
                {codeMessage}
            </Button>
        </div>
    )
}

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


http://www.niftyadmin.cn/n/418446.html

相关文章

【shell 基础13】输入输出与重定向

文章目录 一. 标准输入和标准输出二、重定向1. 定义2. 输出的重定向3. 对标准错误输出重定向4. 输入的重定向 一. 标准输入和标准输出 linux中有三种标准输入输出&#xff0c;分别是STDIN&#xff0c;STDOUT&#xff0c;STDERR&#xff0c;文件描述符分别是 0、1、2。 当运行…

如何学习知识和技能后,把学的知识技能变现

如何学习知识和技能后实现变现&#xff1f; 书中自有黄金屋&#xff0c;书中自有颜如玉&#xff0c;然而读书半生却只有温饱。一技在手&#xff0c;却挣得比别人少。当你感到困惑的时候&#xff0c;有没有发起自问&#xff0c;有没有自我剖析本质。 社会的本质是人&#xff0c…

微服务eureka和nacos

服务远程调用 /*** 创建RestTemplate并注入Spring容器* return*/Beanpublic RestTemplate restTemplate(){return new RestTemplate();} Autowiredprivate RestTemplate restTemplate;public Order queryOrderById(Long orderId) {// 1.查询订单Order order orderMapper.fin…

【Vue】六:路由(上)使用路由 多级路由

文章目录 1.多页面应用2. 单页面应用&#xff08;使用路由&#xff09;3. 多级路由 1.多页面应用 2. 单页面应用&#xff08;使用路由&#xff09; &#xff08;1&#xff09;安装vue-router插件 vue2 要安装 vue-router3 npm i vue-router3vu3 要安装 vue-router4 npm i vue…

React+TS学习和使用

当你开始使用 React 和 TypeScript 开发 Web 应用程序时&#xff0c;你将能够享受到一些非常有用的功能&#xff0c;例如类型检查、代码提示和错误捕获等。在这篇文章中&#xff0c;我们将介绍如何学习和使用 ReactTS&#xff0c;并提供一些有用的示例代码。 准备工作 首先&a…

走进 WWDC 2023 苹果开发者大会

6 月 6 日凌晨开始,苹果在加州总部举行了 WWDC 2023 开发者大会的主题演讲,向全球观众展示了 iOS 17、iPadOS 17、tvOS 17、watchOS 10 和 macOS 14 这五大新系统,以及备受期待的混合现实头显 Apple Vision Pro 和 Mac Pro 等硬件。 以下是对发布会的主要内容和亮点的总结和…

Vision Transformer综述 part I Transformer简介及组成

Vision Transformer综述 1. Transformer简介2. Transformer组成2.1 Self-AttentionMulti-Head Attention&#xff08;多头注意力&#xff09; 2.2 Transformer的其他关键概念2.2.1 Feed-Forward Network 前馈网络2.2.2 Residual Connection 残差连接2.2.3 解码器中的最后一层 1…

计算机网络知识点笔记(1)概述

文章目录 1.计算机网络在信息时代中的作用2.互联网概述2.1.网络的网络2.2.互联网基础结构发展的三个阶段2.3.互联网的标准化工作 3.互联网的组成3.1.互联网的边缘部分3.1.1.客户-服务器方式3.1.2.对等连接方式&#xff08;P2P方式&#xff09; 3.2.互联网的核心部分3.2.1.电路交…