网站首页 > 技术文章 正文
转载说明:原创不易,未经授权,谢绝任何形式的转载
有时,我们希望在React中创建一个倒计时器。在本文中,我们将讨论如何使用React创建一个倒计时器。
使用React创建倒计时器
我们可以通过创建一个定时器组件并定期更新剩余时间来实现倒计时器。为此,我们可以编写以下代码:
Bash
import React, { useEffect, useState } from "react";
// 定义 Timer 组件
const Timer = (props) => {
// 解构赋值,获取传入的初始分钟数和初始秒数
const { initialMinute = 0, initialSeconds = 0 } = props;
// 使用 useState 创建状态变量 minutes 和 seconds
const [minutes, setMinutes] = useState(initialMinute);
const [seconds, setSeconds] = useState(initialSeconds);
// 使用 useEffect 监听组件的生命周期
useEffect(() => {
// 创建定时器,每秒更新一次剩余时间
const myInterval = setInterval(() => {
// 如果秒数大于0,则减去1秒
if (seconds > 0) {
setSeconds(seconds - 1);
}
// 如果秒数为0
if (seconds === 0) {
// 如果分钟数也为0,则清除定时器,停止倒计时
if (minutes === 0) {
clearInterval(myInterval);
} else {
// 如果分钟数不为0,则将分钟数减1,秒数设为59
setMinutes(minutes - 1);
setSeconds(59);
}
}
}, 1000);
// 组件卸载时清除定时器
return () => {
clearInterval(myInterval);
};
});
// 返回倒计时器的渲染结果
return (
<div>
{minutes === 0 && seconds === 0 ? null : (
<h1>
{minutes}:{seconds < 10 ? `0${seconds}` : seconds}
</h1>
)}
</div>
);
};
// 默认导出 App 组件
export default function App() {
// 在 App 组件中使用 Timer 组件,并传入初始分钟数和秒数
return (
<>
<Timer initialMinute={5} initialSeconds={0} />
</>
);
}
我们创建了一个Timer组件,它接受initialMinute和initialSeconds作为props来设置初始时间。
然后我们使用useState来创建minutes和seconds的状态变量。
接下来,我们使用useEffect钩子并传入一个回调函数,用于创建一个使用setInterval的计时器。
计时器每秒运行一次。
setInterval的回调函数检查seconds是否大于0,如果是,则调用setSeconds来减少秒数。
如果seconds为0且minutes为0,则调用clearInterval来停止计时器。
否则,我们调用setMinutes来减少分钟数,同时将seconds设置为59来减少分钟。
然后我们返回一个回调函数,调用clearInterval来清除计时器。
在函数末尾,我们将分钟和秒数渲染到屏幕上。
如果秒数小于10,我们在前面添加一个0。
结论
通过创建一个定时器组件并定期更新剩余时间,我们可以创建一个倒计时器。
由于文章内容篇幅有限,今天的内容就分享到这里,文章结尾,我想提醒您,文章的创作不易,如果您喜欢我的分享,请别忘了点赞和转发,让更多有需要的人看到。同时,如果您想获取更多前端技术的知识,欢迎关注我,您的支持将是我分享最大的动力。我会持续输出更多内容,敬请期待。
猜你喜欢
- 2025-06-24 服务端性能测试实战3-性能测试脚本开发
- 2025-06-24 跨标签页通信(六):Cookie(cookie跨页面)
- 2025-06-24 崩溃!代码总掉链子?6 个 JavaScript 技巧助你稳操胜券
- 2025-06-24 如何取消一个已经开始的 JavaScript Promise
- 2025-06-24 Web页面如此耗电!到了某种程度,会是大损失
- 2025-06-24 setTimeout 出大 bug?为什么需要 setBigTimeout?
- 2025-06-24 悠然!午休十分钟分清 Vue 的 watch 和 computed,面试不发怵
- 2025-06-24 科普:CPU空闲时在忙什么?(cpu空闲温度)
- 2025-06-24 html5大神结合js带你研究古老读心术,你的心思早被猜透
- 2025-06-24 JWT + Refresh + SSO模版(jwt demo)
你 发表评论:
欢迎- 611℃几个Oracle空值处理函数 oracle处理null值的函数
- 603℃Oracle分析函数之Lag和Lead()使用
- 592℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 589℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 583℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 576℃【数据统计分析】详解Oracle分组函数之CUBE
- 566℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 558℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
-
- PageHelper - 最方便的 MyBatis 分页插件
- 面试二:pagehelper是怎么实现分页的,
- MyBatis如何实现分页查询?(mybatis-plus分页查询)
- SpringBoot 各种分页查询方式详解(全网最全)
- 如何在Linux上运行exe文件,怎么用linux运行windows软件
- 快速了解hive(快速了解美国50个州)
- Python 中的 pyodbc 库(pydbclib)
- Linux搭建Weblogic集群(linux weblogic部署项目步骤)
- 「DM专栏」DMDSC共享集群之部署(一)——共享存储配置
- 故障分析 | MySQL 派生表优化(mysql pipe)
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端获取当前时间 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)