reactHooks实现取当前时刻分钟为5或5的倍数实现5分钟粒度每秒倒计时

该代码示例展示了如何使用React的useState和useEffecthooks来创建一个倒计时器,它每5分钟重置一次。它跟踪当前分钟数,计算距离下一个5分钟的秒数,并每秒更新状态。当倒计时归零时,它会显示提示信息。

可以使用useEffectuseState来实现这个功能。具体实现步骤如下:

  1. 使用useState来保存当前时刻的分钟数和计算出距离下一个5分钟的秒数。

const [currentMinute, setCurrentMinute] = useState(new Date().getMinutes());
const [secondsToNextFive, setSecondsToNextFive] = useState(
  (5 - (currentMinute % 5)) * 60 - new Date().getSeconds()
);
  1. 使用useEffect来更新状态值,每秒钟计算一次距离下一个5分钟的秒数。

useEffect(() => {
  const intervalId = setInterval(() => {
    const currentMinute = new Date().getMinutes();
    setCurrentMinute(currentMinute);
    setSecondsToNextFive(
      (5 - (currentMinute % 5)) * 60 - new Date().getSeconds()
    );
  }, 1000);

  return () => clearInterval(intervalId);
}, []);
  1. 使用Math.floor函数来计算倒计时的分钟数和秒数,并且使用条件渲染来判断是否需要显示倒计时。

const minutesLeft = Math.floor(secondsToNextFive / 60);
const secondsLeft = secondsToNextFive % 60;

return (
  <div>
    {minutesLeft === 0 && secondsLeft === 0 ? (
      <p>It's a multiple of 5 minute!</p>
    ) : (
      <p>
        {`Next multiple of 5 minute: ${minutesLeft}m ${secondsLeft}s`}
      </p>
    )}
  </div>
);

完整代码如下:


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

function Countdown() {
  const [currentMinute, setCurrentMinute] = useState(new Date().getMinutes());
  const [secondsToNextFive, setSecondsToNextFive] = useState(
    (5 - (currentMinute % 5)) * 60 - new Date().getSeconds()
  );

  useEffect(() => {
    const intervalId = setInterval(() => {
      const currentMinute = new Date().getMinutes();
      setCurrentMinute(currentMinute);
      setSecondsToNextFive(
        (5 - (currentMinute % 5)) * 60 - new Date().getSeconds()
      );
    }, 1000);

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

  const minutesLeft = Math.floor(secondsToNextFive / 60);
  const secondsLeft = secondsToNextFive % 60;

  return (
    <div>
      {minutesLeft === 0 && secondsLeft === 0 ? (
        <p>It's a multiple of 5 minute!</p>
      ) : (
        <p>
          {`Next multiple of 5 minute: ${minutesLeft}m ${secondsLeft}s`}
        </p>
      )}
    </div>
  );
}

export default Countdown;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值