当前位置:首页 > React

react实现定时器

2026-01-27 16:12:58React

使用 setInterval 实现定时器

在 React 中,可以通过 setInterval 实现定时器功能。需要在组件挂载时启动定时器,并在组件卸载时清除定时器以避免内存泄漏。

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

function Timer() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    const interval = setInterval(() => {
      setCount(prevCount => prevCount + 1);
    }, 1000);

    return () => clearInterval(interval);
  }, []);

  return <div>Count: {count}</div>;
}

export default Timer;

使用 setTimeout 实现递归定时器

setTimeout 可以通过递归调用来实现类似 setInterval 的效果,这种方式更灵活,适合需要动态调整间隔时间的场景。

react实现定时器

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

function Timer() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    const timer = setTimeout(() => {
      setCount(prevCount => prevCount + 1);
    }, 1000);

    return () => clearTimeout(timer);
  }, [count]);

  return <div>Count: {count}</div>;
}

export default Timer;

自定义 Hook 封装定时器

可以将定时器逻辑封装为自定义 Hook,方便复用。

react实现定时器

import { useState, useEffect } from 'react';

function useTimer(initialValue = 0, interval = 1000) {
  const [count, setCount] = useState(initialValue);

  useEffect(() => {
    const timer = setInterval(() => {
      setCount(prevCount => prevCount + 1);
    }, interval);

    return () => clearInterval(timer);
  }, [interval]);

  return count;
}

function Timer() {
  const count = useTimer(0, 1000);
  return <div>Count: {count}</div>;
}

export default Timer;

暂停和恢复定时器

通过状态控制定时器的暂停和恢复功能。

import React, { useState, useEffect, useRef } from 'react';

function Timer() {
  const [count, setCount] = useState(0);
  const [isRunning, setIsRunning] = useState(true);
  const timerRef = useRef(null);

  useEffect(() => {
    if (isRunning) {
      timerRef.current = setInterval(() => {
        setCount(prevCount => prevCount + 1);
      }, 1000);
    }

    return () => {
      if (timerRef.current) clearInterval(timerRef.current);
    };
  }, [isRunning]);

  const toggleTimer = () => {
    setIsRunning(prev => !prev);
  };

  return (
    <div>
      <div>Count: {count}</div>
      <button onClick={toggleTimer}>
        {isRunning ? 'Pause' : 'Resume'}
      </button>
    </div>
  );
}

export default Timer;

使用 requestAnimationFrame 实现高精度定时器

对于需要高精度的动画或计时场景,可以使用 requestAnimationFrame

import React, { useState, useEffect, useRef } from 'react';

function AnimationTimer() {
  const [time, setTime] = useState(0);
  const requestRef = useRef();
  const startTimeRef = useRef();

  const animate = (timestamp) => {
    if (!startTimeRef.current) startTimeRef.current = timestamp;
    const elapsed = timestamp - startTimeRef.current;
    setTime(elapsed);
    requestRef.current = requestAnimationFrame(animate);
  };

  useEffect(() => {
    requestRef.current = requestAnimationFrame(animate);
    return () => cancelAnimationFrame(requestRef.current);
  }, []);

  return <div>Time: {Math.round(time)}ms</div>;
}

export default AnimationTimer;

以上方法覆盖了 React 中实现定时器的常见需求,包括基础定时、暂停恢复、自定义 Hook 封装和高精度计时。根据具体场景选择合适的方式即可。

标签: 定时器react
分享给朋友:

相关文章

电脑如何安装react

电脑如何安装react

安装 Node.js 和 npm React 依赖于 Node.js 和 npm(Node Package Manager)。从 Node.js 官网下载并安装最新稳定版本,安装完成后会自动包含 np…

react如何更新

react如何更新

更新 React 版本的方法 检查当前 React 版本 运行以下命令查看项目中安装的 React 版本: npm list react 更新 React 及相关依赖 通过 npm 或 yar…

如何开发react

如何开发react

开发React应用的基本步骤 安装Node.js和npm 确保系统中已安装Node.js(包含npm)。可通过官网下载安装包,安装后验证版本: node -v npm -v 创建React项目…

如何安装react

如何安装react

安装React的方法 方法一:使用Create React App(官方推荐) Create React App是官方提供的脚手架工具,适合快速搭建React项目。确保已安装Node.js(建议版本≥…

react如何减少setState

react如何减少setState

减少 React 中 setState 调用的方法 合并多次状态更新 使用函数式更新方式合并多次 setState 调用。React 会将多次状态更新批量处理,避免不必要的重新渲染。 // 非函…

react如何引入echarts

react如何引入echarts

安装 ECharts 依赖 在 React 项目中安装 ECharts 核心库和 React 封装库: npm install echarts echarts-for-react 基础引入方式 创…