当前位置:首页 > 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(需用户授权)。

react如何定时提醒

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

示例代码:

react如何定时提醒

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

示例代码:

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 如何引入jquery

react 如何引入jquery

引入 jQuery 到 React 项目 在 React 项目中引入 jQuery 可以通过多种方式实现,但需要注意 React 和 jQuery 操作 DOM 的方式可能冲突,因此建议仅在必要时使用…

如何优化react

如何优化react

优化 React 性能的方法 使用 React.memo 或 PureComponent 对于函数组件,使用 React.memo 进行记忆化,避免不必要的重新渲染。类组件可以使用 PureCompo…

如何改造react

如何改造react

改造 React 项目的关键方法 分析当前项目结构 通过评估现有组件、状态管理和依赖项,明确需要改进的部分。使用工具如 webpack-bundle-analyzer 识别性能瓶颈。 升级 Reac…

理解如何react

理解如何react

理解React的核心概念 React是一个用于构建用户界面的JavaScript库,专注于通过组件化开发提高代码的可维护性和复用性。其核心思想包括虚拟DOM(Virtual DOM)和单向数据流,能够…

react 如何启动

react 如何启动

创建 React 项目 使用官方工具 create-react-app 快速初始化项目,需提前安装 Node.js(版本 ≥ 14.0.0)和 npm/yarn: npx create-react-…

如何关闭react

如何关闭react

关闭React应用的步骤 在开发或运行React应用时,可能需要关闭正在运行的开发服务器或停止应用。以下是几种常见情况的处理方法: 停止开发服务器 如果正在使用npm start或yarn star…