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

在 React 中如何使用定时器

在React中使用定时器通常有两种方式:使用setIntervalsetTimeout函数。

  1. 使用setInterval函数:

首先,在组件中导入useEffectuseState函数:

       import React, { useEffect, useState } from "react";

在组件中声明一个状态变量来存储定时器的ID:

        const [timerId, setTimerId] = useState<number | null>(null);

在组件的useEffect钩子函数中启动定时器:

       useEffect(() => {const id = setInterval(() => {// 定时器执行的代码}, 1000);setTimerId(id);return () => {clearInterval(timerId); // 组件卸载时清除定时器};}, []);

在上述代码中,通过useEffect中的一个空数组([])作为依赖项,确保只在组件挂载时启动一次定时器,并使用clearInterval函数在组件卸载时清除定时器。

  1. 使用setTimeout函数:

首先,在组件中导入useEffectuseState函数:

        import React, { useEffect, useState } from "react";

在组件中声明一个状态变量来存储定时器的ID:

        const [timerId, setTimerId] = useState<number | null>(null);

在组件的useEffect钩子函数中启动定时器:

       useEffect(() => {const id = setTimeout(() => {// 定时器执行的代码}, 1000);setTimerId(id);return () => {clearTimeout(timerId); // 组件卸载时清除定时器};}, []);

在上述代码中,通过useEffect中的一个空数组([])作为依赖项,确保只在组件挂载时启动一次定时器,并使用clearTimeout函数在组件卸载时清除定时器。

请根据你的具体需求选择适合的定时器函数,并根据组件的生命周期来启动和清除定时器。

实际案例:

import { useEffect, useState } from "react";const TimerPage = () => {const [changeNum, setChangeNum] = useState<any>(null);const [getChangeNum, setGetChangeNum] = useState<any>(null);const initiate = () => {let num = 0;const id = setInterval(() => {// 定时执行的代码num++;if (num == 11) {// clearTimeout(id); // 在 getChangeNum 等于 10 时关闭定时器num = 0;}setGetChangeNum(num);}, 1000); // 每隔1秒执行一次setChangeNum(id);};return (<div className="box"><p onClick={initiate}>显示数字 {getChangeNum} </p></div>);
};export default TimerPage;
  1. 首先,声明了一个变量num并初始化为0,用来存储递增的数字。
  2. 然后,使用setInterval函数创建了一个定时器。setInterval函数接受两个参数:回调函数和时间间隔。在这里,回调函数为一个箭头函数,用于执行定时的递增操作。
  3. 在回调函数中,num自增1,表示递增的数字。当num等于11时,通过条件判断将num重置为0,实现周期递增的效果。
  4. 在回调函数中,使用setGetChangeNum函数将递增的结果num更新到getChangeNum状态变量中,以便将其显示在文本段落元素中。
  5. setInterval的第二个参数为时间间隔,这里设置为1000毫秒,即每隔1秒执行一次回调函数。
  6. 最后,使用setChangeNum函数将定时器的ID存储到changeNum状态变量中,以便在需要的时候清除定时器。

在点击文本段落元素时,initiate 函数会被调用,定时器开始启动,每隔1秒递增数字并更新到状态变量中。文本段落元素会显示递增的数字。

http://www.lryc.cn/news/147431.html

相关文章:

  • Unity记录4.6-存储-第四阶段总结
  • 【Python】从入门到上头— 使用包、模块、安装第三方模块(7)
  • flutter和原生利用pigeon建立通道
  • TCP连接分析:探寻TCP的三次握手
  • gitHooks使用教程
  • 2023.8 - java - 数组
  • ChatGPT怎么辅助解决社会问题?
  • Rust之自动化测试(一):如何编写测试
  • 简单聊聊Https的来龙去脉
  • 【注册岩土】Python土力学与基础工程计算.PDF-土中的应力
  • 祝贺!Databend Cloud 和阿里云 PolarDB 达成认证
  • SQL语言-01
  • PyCharm软件安装包分享(附安装教程)
  • AI文本标注的概念,类型和方法
  • 【AutoLayout案例04-游戏图片-按钮适配 Objective-C语言】
  • Spring Boot业务系统如何实现海量数据高效实时搜索
  • 面向对象的设计原则
  • 前端需要理解的工程化知识
  • 【Terraform学习】使用 Terraform创建DynamoDB添加项目(Terraform-AWS最佳实战学习)
  • 基于单片机教室人数实时检测系统
  • alibabacloud的简单使用,nacos配置中心+服务中心。作者直接给自己写的源码
  • Python爬虫:一个爬取豆瓣电影人像的小案例
  • STM32CubeMX配置STM32G0 Standby模式停止IWDG(HAL库开发)
  • 39.RESTful案例
  • Power Pivot 实现数据建模
  • Ansible自动化运维之playbooks剧本
  • Docker - Docker安装MySql并启动
  • SQL Server 2019导入txt数据
  • 科研 | Zotero导入无PDF的参考文献、书籍
  • 【Docker】docker入门之dockerfile编写