@ka2n

Как обнулить секундомер и снова начать отсчет при кликe?

Не получается при клике на reset перезапустить секундомер, он сбрасывается на 0 и начинает отсчет с предыдущего состояния. Нужно, чтобы он сбросил время и начал отсчет с 0, хелп
function App() {
  const [time, setTime] = useState({h:0, m:0, s:0})
  const [interv, setInterv] = useState()
  const [status, setStatus] = useState(0)
  var updatedSec = time.s, updatedMin = time.m, updatedHour = time.h

  const start = () => {
    run()
    setStatus(1)
    setInterv(setInterval(run, 1000))
  };

  
  const run = () => {
    if (updatedMin === 60) {
      updatedHour++;
      updatedMin = 0
    }
    if (updatedSec === 60) {
      updatedMin++;
      updatedSec = 0
    }
    updatedSec++;
    return setTime({ h: updatedHour, m: updatedMin, s: updatedSec })
  }

  const wait = () => {
      clearInterval(interv)
      setStatus(2)
  }

  const stop = () => {
    clearInterval(interv)
    setStatus(0)
    setTime({h:0, m:0, s:0})
  }
  
  const reset = () => {
    clearInterval(interv)
    setTime({ h: 0, m: 0, s: 0 })
    start()
  } 
  return (
    <div className="main-section">
      <div className="clock-holder">
        <div className="stopwatch">
          <DisplayComponent time={time}/>
          <BtnComponent start={start} wait={wait} stop={stop} reset={reset} status={status}/>
        </div>
      </div>
    </div>
  );
}
  • Вопрос задан
  • 60 просмотров
Решения вопроса 1
0xD34F
@0xD34F
Дичь какая-то - зачем вам хранить количество минут и часов? Достаточно секунд (да, их будет не 0-59, а сколько угодно), минуты и часы вычисляются, если нужны.

сбрасывается на 0 и начинает отсчет с предыдущего состояния

Что неудивительно - метод run работает с "несброшенными" данными. Чтобы иметь доступ к актуальному состоянию, используйте функциональное обновление.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы