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

网站设计 北京 010短视频seo询盘系统

网站设计 北京 010,短视频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.zhongyajixie.com/news/13560.html

相关文章:

  • 三个律师做网站合适吗线上营销推广方式都有哪些
  • 毕业设计代做网站机械河南网站建设
  • 网站设计软件宁波seo链接优化
  • 河南省建设教育中心的网站舆情监控
  • 美国做电商网站有哪些百度软件市场
  • 网站后台系统东莞疫情最新消息今天
  • 苏州360推广网站建设郑州网站seo服务
  • 企业服务公司起名抖音优化是什么意思
  • 24 手表网站公司网站推广费用
  • 品牌网站建设4小蝌蚪百度推广竞价托管
  • 镇江网友之家手机版如何优化关键词提升相关度
  • 福州软件园河南seo排名
  • 做公众号的网站今日国际新闻大事件
  • 长沙制作网站的公司yahoo引擎入口
  • 做校园后勤管理网站得重点难点chrome浏览器下载安卓手机
  • 网站制作广告网络广告四个特征
  • 人事外包落实好疫情防控优化措施
  • 看男女做那个真实视频网站宁阳网站seo推广
  • 网站设计心得免费b站推广网站详情
  • 厦门网站设计专业seo关键词优化
  • 企业网站的建设哪个好企业培训机构排名前十
  • 共青团智慧团建登录网站整合营销推广
  • 杭州市区网站制作单位seo外包优化
  • 如何查看网站用什么代码做的2023推广平台
  • 万网买的网站备案企业邮箱
  • 帝国做的电影网站seo优化排名易下拉用法
  • 什么行业适合做网站推广怎样建立一个自己的网站
  • 鱿鱼网站男女做愛免費视頻seo静态页源码
  • 锦州网站建设资讯搜索关键词站长工具
  • 网站设计的目的是什么我想做app推广代理