怎么用React+Typescript实现倒计时的功能
发表于:2025-11-18 作者:千家信息网编辑
千家信息网最后更新 2025年11月18日,这篇文章主要介绍"怎么用React+Typescript实现倒计时的功能",在日常操作中,相信很多人在怎么用React+Typescript实现倒计时的功能问题上存在疑惑,小编查阅了各式资料,整理出简
千家信息网最后更新 2025年11月18日怎么用React+Typescript实现倒计时的功能
这篇文章主要介绍"怎么用React+Typescript实现倒计时的功能",在日常操作中,相信很多人在怎么用React+Typescript实现倒计时的功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么用React+Typescript实现倒计时的功能"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
import { useEffect, useRef } from 'react'/** * interTerval hooks组件 * @param fn 执行函数 * @param delay 时间 * @param options immediate为true时,先立即执行一次fn函数后再执行定时器 */function useInterval( fn: () => void, delay: number | null | undefined, options?: { immediate?: boolean }): void { const immediate = options?.immediate const timerRef = useRef<() => void>() timerRef.current = fn useEffect(() => { if (delay === undefined || delay === null) { return } if (immediate) { timerRef.current?.() } const timer = setInterval(() => { timerRef.current?.() }, delay) return () => { clearInterval(timer) } }, [delay])}export default useInterval实现倒计时Hook
import { useState, useEffect, useRef, useMemo } from 'react'import { useInterval } from './'interface ITime { /** 当前时间 */ currentTime?: number /** 结束时间 */ endTime?: number /** 另一种方式,不传当前时间和结束时间,直接传时间差 */ differTime?: number}interface ICbTime { d: number h: number m: number s: number}/** * 倒计时hooks * @param options 时间对象 * @param cb 倒计时完成时执行的回调函数 * @param noImmediate 时间传进来满足执行回调条件时,是否立即执行回调,默认false执行 */function useCountDown( options: ITime, cb?: () => void, noImmediate?: boolean): ICbTime { const { currentTime = 0, endTime = 0, differTime = 0 } = options const [diffTime, setDiffTime] = useState(0) /** 组件接收到参数时的时间 */ const entryTime = useRef(0) /** 当前倒计时要求的时间差 */ const maxTime = useRef(0) /** 是否可以执行回调 */ const isImplementCb = useRef(false) useEffect(() => { if (!isImplementCb.current) { isImplementCb.current = true } if ((currentTime > 0 && endTime > 0) || differTime > 0) { entryTime.current = new Date().getTime() maxTime.current = differTime > 0 ? differTime : endTime - currentTime if (maxTime.current <= 0 && noImmediate) { isImplementCb.current = false } setDiffTime(maxTime.current) } }, [currentTime, endTime, differTime]) useInterval( () => { const curtTimes = new Date().getTime() const TimeDifference = curtTimes - entryTime.current setDiffTime(maxTime.current - TimeDifference) }, diffTime <= 0 ? null : 1000 ) const timeObj = useMemo(() => { const time = diffTime > 0 ? diffTime / 1000 : 0 const d = Math.floor(time / (24 * 60 * 60)) const h = Math.floor((time / (60 * 60)) % 24) const m = Math.floor((time / 60) % 60) const s = Math.ceil(time % 60) if (diffTime <= 0 && isImplementCb.current) { /** * setTimeout用于解决react报错问题: * annot update during an existing state transition (such as within `render`). * Render methods should be a pure function of props and state. */ setTimeout(() => { cb?.() }, 0) } return { d, h, m, s } }, [diffTime]) return timeObj || ({} as ICbTime)}export default useCountDown 写个demo看一下效果?
const TimeArea = () => { const { d, h, m, s } = useCountDown( { currentTime: 1631262176333, endTime: 1831062176333 }, () => { alert('倒计时结束') } ) return ( 距离任务结束 {d}天{h < 10 ? '0' + h : h}: {m < 10 ? '0' + m : m}:{s < 10 ? '0' + s : s} ) }到此,关于"怎么用React+Typescript实现倒计时的功能"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
时间
倒计时
功能
学习
函数
时间差
更多
组件
帮助
实用
接下来
任务
参数
定时器
对象
效果
文章
方式
方法
条件
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
linux mc 服务器
北京软件开发服务商
软件开发者学什么语言
企业网络安全关键
雷霆之王服务器盗贼
违反网络安全的危害
杭州载言网络技术有限公司欠款
软件开发都是一次性合同吗
胜天软件开发公司
织梦数据库主机填
外文数据库中有哪些引文数据库
计算机和网络安全教程
青年科学家评论网络安全
怎么打开云服务器空间管理后台
搭建云服务器运行Linux
自动化软件开发方向
梦幻灵岩山服务器
网络安全 课题研究
搅乱网络安全秩序
上海喜极互联网科技有限公司
国家网络安全曲
金碟软件开发票流程
服务器的集群
马鞍山企业软件开发费用
工信部软件开发师考试多少钱
全行业网络安全工作部署
网络安全线上培训机构
交易中国原油的软件开发
傲腾内存服务器性能
浙江gps双模时间服务器搭建