当前位置: 首页 > news >正文

无忧网站优化专业网站设计公司行业

无忧网站优化,专业网站设计公司行业,做网站一定要买,爱站网站seo查询工具背景 在开发过程中,经常需要使用到倒计时的场景,当用户点击后,按钮进行倒计时,然后等待邮件或者短信发送,每次都写重复代码,会让代码显得臃肿,所以封装一个组件来减少耦合 创建一个倒计时组件…

背景

在开发过程中,经常需要使用到倒计时的场景,当用户点击后,按钮进行倒计时,然后等待邮件或者短信发送,每次都写重复代码,会让代码显得臃肿,所以封装一个组件来减少耦合

创建一个倒计时组件

在这里插入图片描述

编辑基本框架

设计3个参数,一个是倒计时时长,一个是开始时执行的方法,一个是展示文本

import React, { useState, useEffect, useRef } from 'react';
import { Button } from 'antd';// 定义 CountdownButton 的属性接口
interface CountdownButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onClick'> {countdownTime?: number;text?: string;onStart?: () => void;
}const CountdownButton: React.FC<CountdownButtonProps> = ({ countdownTime = 60, text = '获取验证码', onStart, ...restProps }) => {const [isDisabled, setIsDisabled] = useState(false);const [buttonText, setButtonText] = useState(text);// 使用useRef来保存倒计时的当前值,避免状态重置const countdownRef = useRef(countdownTime);const intervalRef = useRef<number | null>(null);return (<Button >{buttonText}</Button>);
};export default CountdownButton;

实现倒计时方法

实现剩余时间修改方法

    // 使用自定义的setCountdownRef函数来更新倒计时值const setCountdownRef = (update: (current: number) => number) => {const newCountdown = update(countdownRef.current);countdownRef.current = newCountdown;};

实现开启倒计时方法

   const handleStartCountdown = () => {// 立即更新按钮文本和状态setButtonText(`${countdownRef.current}s后重试`);setIsDisabled(true);if (typeof onStart === 'function') {onStart();}// 如果已经有定时器存在,则清除它if (intervalRef.current !== null) {clearInterval(intervalRef.current!);}intervalRef.current = setInterval(() => {setButtonText(`${countdownRef.current}s后重试`);setCountdownRef((prevCountdown) => {if (prevCountdown <= 1) {clearInterval(intervalRef.current!);intervalRef.current = null;setButtonText(text);setIsDisabled(false);return countdownTime; // 重置倒计时时间}return prevCountdown - 1;});}, 1000);

实现清楚定时器方法

    // 清除定时器useEffect(() => {return () => {if (intervalRef.current !== null) {clearInterval(intervalRef.current!);}};}, []);

完整代码

import React, { useState, useEffect, useRef } from 'react';
import { Button } from 'antd';// 定义 CountdownButton 的属性接口
interface CountdownButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onClick'> {countdownTime?: number;text?: string;onStart?: () => void;
}const CountdownButton: React.FC<CountdownButtonProps> = ({ countdownTime = 60, text = '获取验证码', onStart, ...restProps }) => {const [isDisabled, setIsDisabled] = useState(false);const [buttonText, setButtonText] = useState(text);// 使用useRef来保存倒计时的当前值,避免状态重置const countdownRef = useRef(countdownTime);const intervalRef = useRef<number | null>(null);// 清除定时器useEffect(() => {return () => {if (intervalRef.current !== null) {clearInterval(intervalRef.current!);}};}, []);const handleStartCountdown = () => {// 立即更新按钮文本和状态setButtonText(`${countdownRef.current}s后重试`);setIsDisabled(true);if (typeof onStart === 'function') {onStart();}// 如果已经有定时器存在,则清除它if (intervalRef.current !== null) {clearInterval(intervalRef.current!);}intervalRef.current = setInterval(() => {setButtonText(`${countdownRef.current}s后重试`);setCountdownRef((prevCountdown) => {if (prevCountdown <= 1) {clearInterval(intervalRef.current!);intervalRef.current = null;setButtonText(text);setIsDisabled(false);return countdownTime; // 重置倒计时时间}return prevCountdown - 1;});}, 1000);// 立即减少一次倒计时,使首次显示正确的剩余时间setCountdownRef((prevCountdown) => prevCountdown - 1);};// 使用自定义的setCountdownRef函数来更新倒计时值const setCountdownRef = (update: (current: number) => number) => {const newCountdown = update(countdownRef.current);countdownRef.current = newCountdown;};return (<Button {...restProps} onClick={handleStartCountdown} disabled={isDisabled}>{buttonText}</Button>);
};export default CountdownButton;

使用方法

<CountdownButton countdownTime={60} text={"获取验证码"} onStart={sendMsg} type="primary" />

效果

在这里插入图片描述

http://www.yayakq.cn/news/860587/

相关文章:

  • net网站开发环境wordpress淘宝客pid
  • 计算机应用技术php网站开发照片做3d网站
  • 长沙网站优化页面网页游戏排行榜电脑
  • 网站侵权怎么做公证或证据保存做黄金的分析师网站
  • 北京网站建设推广服务信息如何利用tp-link按错900做网站
  • 网站安全建设目的是什么网站运营专员是干嘛的
  • 打开网站出现directorywordpress几万条数据
  • 网站设计的国际专业流程网站订制公司
  • 网站域名备案密码图片制作pdf文件
  • 新网站多久收录内页网站环境搭建教程
  • 学生作业网站惠州做网站公司
  • 2019年的阜南县建设修路网站凡科登录网站手机版
  • 汕尾市企业网站seo点击软件wordpress翻译中文
  • 电商网站建设注意事项做京东一样的网站
  • 手机网站建设的重点步骤献县制作网站
  • 做一个网站的价钱wordpress 分段
  • 三亚河北建设招聘信息网站网站建设会议纪要
  • 专业建设润滑油网站网站优化报价
  • 徐州有哪些制作网站的公司吗山东省中国建设银行网站
  • 网站公司建设网站价格新乡市四合一网站建设
  • 企业网站信息化建设重庆建设集团官方网站
  • 小型服务器做网站wordpress表单支付插件下载
  • 公司做网站需要几个人网站加载速度
  • 汕尾招聘 网站建设合伙人flash同视频做网站
  • 东营网站建设那家好库房出入库管理软件
  • 网站推广公司电话云浮市住房和城乡建设局网站
  • nginx即代理又做网站wordpress全站静态页面
  • 彩票计划网站怎么做798艺术区个人拍照图片及价格
  • 免费做电脑网站商城网站建设合同范本
  • 写作网站保底和全勤的区别网站搭建详细流程