网站首页 > 技术文章 正文
转载说明:原创不易,未经授权,谢绝任何形式的转载
有时,我们希望在React中创建一个倒计时器。在本文中,我们将讨论如何使用React创建一个倒计时器。
使用React创建倒计时器
我们可以通过创建一个定时器组件并定期更新剩余时间来实现倒计时器。为此,我们可以编写以下代码:
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)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- oracle面试 (55)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)