setInterval продолжает ускоряться - PullRequest
0 голосов
/ 23 января 2020

Новое в стеке и новое, более или менее, в JS и React (пытаюсь go через бесплатный загрузочный код для кодирования).

В любом случае, я работаю над созданием часов Pomodoro и Я использую setInterval для обратного отсчета.

Нажатие кнопки воспроизведения / паузы меняет состояние и запускает таймер обратного отсчета. Повторное нажатие, пауза (пауза работает просто отлично). Но, снова запуская часы вверх, они значительно ускоряются, как будто, нажимая кнопку воспроизведения, он меняет интервал в setInterval, почти до точки, где он начинает обратный отсчет на единицу как обычно, затем ускоряется, отсчитывает время как обычно, затем ускоряется снова Я не уверен, где это идет не так или как это вызывается. Любая помощь приветствуется.

 startStop(){
    this.changeState();
    this.startClock();
  }

  changeState(){
    if (this.state.timer_Running == true){
      this.setState({timer_Running: false})
    } else {
      this.setState({timer_Running: true})
    }
  }

  startClock() {
    this.setState({timer_State: setInterval(this.timerFunc, 1000)}); //Sets the interval at 1000ms or 1 second
  }

  timerFunc() { 
    if (this.state.timer_Running == true) { //Timer running is a state set to false so that when the play/pause button is hit, it switches to true and then the timer then begins.
      if (this.state.timer_Sec == 0) {
        this.setState({
          timer_Sec: 10, 
          timer_Min: this.state.timer_Min - 1
        });
      }
      if (this.state.timer_Sec > 0) {
        this.setState({timer_Sec: this.state.timer_Sec - 1})
      }
      if (this.state.timer_Min <= 0 && this.state.timer_Sec == 0) {
        //Need to change this to make sure that it then adds in break to replace session and start that timer.
        this.stopClock();  
      }
    } else{
      this.stopClock();
    }
  }


  stopClock() {
    clearInterval(this.state.timer_State);
  }
...