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

React秒表需求:初始禁用Reset按钮,启动计时后启用

实现React秒表Reset按钮的禁用状态控制

要实现初始阶段禁用Reset按钮、点击Start后启用的效果,只需通过**计时时间time和状态status**判断来控制按钮的disabled属性即可,具体修改如下:

1. 统一禁用条件

初始状态下time为0且status为'start',此时Reset按钮禁用;点击Start后,无论后续是运行还是暂停状态,只要time>0或status不为'start',按钮就保持启用;点击Reset回到初始状态后,按钮重新禁用。

2. 修改后的完整代码

import React, { useState, useEffect } from 'react';
import './Stopwatch.css';
function Stopwatch() {
  const [status, setStatus] = useState('start');
  const [time, setTime] = useState(0);
  const [isRunning, setIsRunning] = useState(false);
  const [intervalId, setIntervalId] = useState(null);

  useEffect(() => {
    if (!isRunning) {
      clearInterval(intervalId);
    }
  }, [isRunning, intervalId]);

  function start() {
    setIsRunning(true);
    setStatus ('running');
    let startTime = Date.now() - time;
    let id = setInterval(() => {
      setTime(Date.now() - startTime);
    }, 10);
    setIntervalId(id);
  }

  function pause() {
    setStatus('paused');
    setIsRunning(false);
  }

  function resume() {
    setIsRunning(true);
    setStatus('running');
    let startTime = Date.now() - time;
    let id = setInterval(() => {
      setTime(Date.now() - startTime);
    }, 10);
    setIntervalId(id);
  }

  function reset() {
    setTime(0);
    setStatus('start');
    setIsRunning(false);
  }

  let hours = Math.floor((time / (1000 * 60 * 60)) % 24);
  let minutes = Math.floor((time / (1000 * 60)) % 60);
  let seconds = Math.floor((time / 1000) % 60);

  // 提取禁用条件变量,统一管理
  const isResetDisabled = time === 0 && status === 'start';

  return (
    <div>
      <h1>
        <h1><b>React Stopwatch</b></h1>
        {hours < 10 ? '0' + hours : hours}:
        {minutes < 10 ? '0' + minutes : minutes}:
        {seconds < 10 ? '0' + seconds : seconds}
      
      </h1>
      {isRunning ?(
      <>
      <button onClick={pause}>Pause</button>
      <button onClick={reset} disabled={isResetDisabled}>Reset</button>
      </>
      ):
      (status ==='start'?(
        <>
          <button onClick={start}>Start</button>
          <button onClick={reset} disabled={isResetDisabled}>Reset</button>
        </>) : ( <>
          <button onClick={resume}>Resume</button>
          <button onClick={reset} disabled={isResetDisabled}>Reset</button>
          </>)
      ) }
    </div>
  );
}

export default Stopwatch;

效果说明

  • 页面加载完成后,Reset按钮处于禁用状态,只有Start按钮可点击
  • 点击Start开始计时后,Reset按钮自动启用,可随时重置计时
  • 点击Reset后,计时清零并回到初始状态,Reset按钮再次禁用

内容的提问来源于stack exchange,提问作者GIRIDARAN T P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:15:10