网站首页 > 技术文章 正文
转载说明:原创不易,未经授权,谢绝任何形式的转载
有时,我们希望在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。
结论
通过创建一个定时器组件并定期更新剩余时间,我们可以创建一个倒计时器。
由于文章内容篇幅有限,今天的内容就分享到这里,文章结尾,我想提醒您,文章的创作不易,如果您喜欢我的分享,请别忘了点赞和转发,让更多有需要的人看到。同时,如果您想获取更多前端技术的知识,欢迎关注我,您的支持将是我分享最大的动力。我会持续输出更多内容,敬请期待。
猜你喜欢
- 2024-10-05 聊聊浏览器的事件循环 浏览器循环点击插件
- 2024-10-05 vue 基础-生命周期 lifecycle 的执行顺序和作用
- 2024-10-05 前端如何搞监控总结篇 前端实时监控界面
- 2024-10-05 JavaScript setTimeout要理解 js中settime
- 2024-10-05 描述React的组件生命周期方法,并解释它们在何时被调用。
- 2024-10-05 面试必备-setTimeout vs setInterval哪个更准确,0ms延迟的真相
- 2024-10-05 autolog.js:一个小而美的toast插件。
- 2024-10-05 JavaScript 事件循环:理解进程、线程和异步编程
- 2024-10-05 高级前端进阶,你了解事件循环吗?
- 2024-10-05 「中高级前端」高性能渲染十万条数据(时间分片)
你 发表评论:
欢迎- 05-10如何优化数据库和前端之间的交互?
- 05-10前端代码优化小秘籍(前端优化24条建议)
- 05-10VS Code当中的15个神仙插件,值得收藏
- 05-10如何自己开发一个Google浏览器插件?
- 05-10前端流行框架Vue3教程:14. 组件传递Props效验
- 05-10吃了一年的SU,最好用的插件都在这了
- 05-10前端必看!这款神器让网站界面告别千篇一律
- 05-10程序员请收好:10个非常有用的 Visual Studio Code 插件
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- 前端懒加载 (45)
- 前端接口 (46)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle查询数据库 (45)
- oracle约束 (46)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)