当前位置:首页 > React

react如何定时提醒

2026-02-26 09:14:07React

使用 setTimeout 和 setInterval

在 React 中,可以使用 JavaScript 原生的 setTimeoutsetInterval 实现定时提醒功能。setTimeout 用于单次提醒,setInterval 用于周期性提醒。

单次提醒示例:

import React, { useEffect } from 'react';

function Reminder() {
  useEffect(() => {
    const timer = setTimeout(() => {
      alert('时间到了!');
    }, 5000); // 5秒后触发

    return () => clearTimeout(timer); // 组件卸载时清除定时器
  }, []);

  return <div>5秒后会有提醒</div>;
}

周期性提醒示例:

import React, { useEffect } from 'react';

function PeriodicReminder() {
  useEffect(() => {
    const interval = setInterval(() => {
      alert('每隔3秒提醒一次');
    }, 3000);

    return () => clearInterval(interval); // 组件卸载时清除定时器
  }, []);

  return <div>每隔3秒会有提醒</div>;
}

使用自定义 Hook 封装定时逻辑

为了复用定时逻辑,可以创建一个自定义 Hook,例如 useTimer

import { useEffect } from 'react';

function useTimer(callback, delay) {
  useEffect(() => {
    const timer = setInterval(callback, delay);
    return () => clearInterval(timer);
  }, [callback, delay]);
}

function CustomTimerComponent() {
  useTimer(() => {
    console.log('自定义 Hook 触发的提醒');
  }, 2000);

  return <div>使用自定义 Hook 实现定时提醒</div>;
}

结合 Notification API 实现浏览器通知

如果需要更显眼的提醒,可以调用浏览器的 Notification API(需用户授权)。

import React, { useEffect } from 'react';

function NotificationReminder() {
  useEffect(() => {
    const timer = setTimeout(() => {
      if (Notification.permission === 'granted') {
        new Notification('提醒', { body: '任务已完成!' });
      } else if (Notification.permission !== 'denied') {
        Notification.requestPermission().then(permission => {
          if (permission === 'granted') {
            new Notification('提醒', { body: '任务已完成!' });
          }
        });
      }
    }, 5000);

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

  return <div>5秒后发送浏览器通知</div>;
}

使用第三方库(如 react-toastify)

对于更丰富的提醒样式,可以使用第三方库如 react-toastify

安装:

npm install react-toastify

示例代码:

import React, { useEffect } from 'react';
import { toast } from 'react-toastify';
import 'react-toastify/dist/ReactToastify.css';

function ToastReminder() {
  useEffect(() => {
    const timer = setTimeout(() => {
      toast.success('任务提醒!');
    }, 3000);

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

  return <div>3秒后显示 Toast 提醒</div>;
}

结合日期时间库(如 date-fns)

如果需要基于特定时间点触发提醒,可以使用日期时间库(如 date-fns)计算时间差。

安装:

npm install date-fns

示例代码:

react如何定时提醒

import React, { useEffect, useState } from 'react';
import { differenceInMilliseconds, parseISO } from 'date-fns';

function ScheduledReminder() {
  const [targetTime] = useState('2023-12-31T23:59:59');

  useEffect(() => {
    const targetDate = parseISO(targetTime);
    const now = new Date();
    const delay = differenceInMilliseconds(targetDate, now);

    if (delay > 0) {
      const timer = setTimeout(() => {
        alert('新年快乐!');
      }, delay);

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

  return <div>在指定时间({targetTime})触发提醒</div>;
}

注意事项

  • 定时器需在组件卸载时清理(clearTimeout/clearInterval),避免内存泄漏。
  • 浏览器通知需用户授权,首次调用时会弹出权限请求对话框。
  • 第三方库(如 react-toastify)提供了更多自定义选项,适合复杂场景。

标签: react
分享给朋友:

相关文章

react moment如何使用

react moment如何使用

安装 react-moment 通过 npm 或 yarn 安装 react-moment: npm install react-moment 或 yarn add react-moment 基本…

react如何开发

react如何开发

React 开发基础步骤 安装 Node.js 和 npm/yarn 确保系统已安装 Node.js(包含 npm)或 Yarn。React 项目依赖这些工具管理包和运行脚本。官方推荐使用 Node.…

react如何打包

react如何打包

打包 React 项目的基本步骤 React 项目通常使用 create-react-app 或类似的脚手架工具创建,这些工具内置了打包功能。以下是打包 React 项目的详细方法: 安装依赖并构建…

react 如何获取dom

react 如何获取dom

获取 DOM 的方法 在 React 中,可以通过 useRef 或 createRef 来获取 DOM 节点。useRef 是函数组件中常用的方法,而 createRef 通常用于类组件。 使用…

react如何创建数组

react如何创建数组

创建数组的方法 在React中创建数组与普通JavaScript相同,可以使用多种方式。以下是常见的几种方法: 使用数组字面量 const array = [1, 2, 3, 4]; 使用Arra…

flask如何运行react

flask如何运行react

运行 Flask 与 React 的集成方法 将 Flask 作为后端 API 服务器,React 作为前端框架,可以通过以下方式实现两者的协同运行。 方法一:分离开发模式(开发阶段) 在开发阶段…