You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中使用moment.js如何在页面渲染时启动2分钟倒计时

实现2分钟自动倒计时的调整方案

你原有代码无法正常倒计时的核心原因是,timeBetween是写死的固定静态值,没有和实时更新的时间做差值计算,所以页面上的数字永远停在初始的2分0秒不会变动。

核心修改逻辑

  • 页面首次渲染时,记录「当前时间+2分钟」作为倒计时终点
  • 每秒计算当前时间和终点的时间差,得到实时剩余的分、秒数
  • 倒计时走到00:00时自动清除定时器,避免无效运行
  • 增加补零逻辑,保证分、秒始终以两位格式展示

调整后可直接运行的完整代码

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

export default function CountdownMonths(){
  // 初始化时记录倒计时结束时间点:当前时间加2分钟
  const [endTime] = useState(moment().add(2, 'minutes'));
  // 存储实时剩余时长,初始值为2分钟
  const [remainingTime, setRemainingTime] = useState(moment.duration(2, 'minutes'));

  useEffect(() => {
    const timer = setInterval(() => {
      const timeDiff = endTime.diff(moment());
      // 时间差小于等于0时,倒计时结束
      if (timeDiff <= 0) {
        setRemainingTime(moment.duration(0));
        clearInterval(timer);
        return;
      }
      setRemainingTime(moment.duration(timeDiff));
    }, 1000);

    // 组件卸载时清除定时器,防止内存泄漏
    return () => clearInterval(timer);
  }, [endTime]);

  // 数字补零,保证分、秒都是两位显示
  const formatNum = (num) => String(num).padStart(2, '0');

  return (
    <>
      <p>Deadline comes in</p>
      <p className="counter">
        <span>{formatNum(remainingTime.minutes())}:</span>
        <span>{formatNum(remainingTime.seconds())}</span>
      </p>
    </>
  );
};

页面加载后这段代码会自动启动倒计时,从02:00逐秒倒数到00:00后自动停止。


内容的提问来源于stack exchange,提问作者Dante1021

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 02:21:15