当前位置:首页 > 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

选购 React 相关产品或服务的建议 React 是一个用于构建用户界面的 JavaScript 库,广泛应用于前端开发。以下是选购 React 相关产品(如课程、书籍、工具、组件库等)的参考方法:…

如何安装react

如何安装react

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

react就业如何

react就业如何

React 就业市场现状 React 作为当前主流前端框架之一,就业需求持续旺盛。国内外互联网企业、中大型公司以及初创团队普遍采用 React 技术栈,尤其在 Web 应用、移动端(React Nat…

react 如何精通

react 如何精通

掌握核心概念 深入理解React的基础概念,包括组件(函数组件与类组件)、状态(useState)、生命周期(useEffect)、Props传递、虚拟DOM与Diff算法。通过官方文档或《React…

如何监控react性能

如何监控react性能

使用 React Profiler API React 16.5 及以上版本内置了 Profiler API,可直接测量组件渲染时间。通过 <React.Profiler> 包裹目标组件,…

react路由如何配置

react路由如何配置

React 路由配置方法 安装 React Router 使用 npm 或 yarn 安装 React Router 的 DOM 版本: npm install react-router-dom #…