handlePlay
запускает таймер при нажатии кнопки, но не проверяет остальное, как вы ожидаете.
Это потому, что функция, предоставленная setInterval
, имеет значение
console.log(this.state.seconds)
this.setState({
seconds: this.state.seconds - 1
})
, а не функция handlePlay
.
Для лучшей читаемости и удобства обслуживания (а также для работы с кодом), разделите logi c, который обрабатывает уменьшение времени, от кода, запускающего таймер. Например:
class MyApp extends React.Component {
constructor(props) {
super(props)
this.state = {
minutes: 0,
seconds: 10,
play: false,
display: "SESSION"
}
this.handlePlay = this.handlePlay.bind(this);
this.handleTime = this.handleTime.bind(this);
}
// handlePlay only launches the timer.
handlePlay() {
this.Myvar = setInterval(this.handleTime, 200);
}
// handleTime deals with the logic of decrementing time.
handleTime() {
if (this.state.seconds > 0) {
console.log(this.state.seconds)
this.setState({
seconds: this.state.seconds - 1
})
} else {
console.log("minus")
clearInterval(this.Myvar)
}
}
}
handlePlay
теперь интерфейс между пользовательским интерфейсом (нажатие кнопки) и logi c (уменьшение времени обработки). Таймер запускается только с setInterval
.
handleTime
, который обрабатывает лог c уменьшения времени. Он вызывается каждый раз, когда setInterval
срабатывает и останавливает таймер, когда время истекло.