Не работает timer react.js
При нажатии на Start запускается функция startTimer, она проверяет запущен ли таймер, если не запущен то начинается таймер прибавляя +1 секунду в secondsData, после 59 секунд должна добавиться +1 минута в minutesData, но вместо этого у меня добавляется +2.
function App() {
const [start, setStart] = React.useState(0);
const [secondsData, setSecondsData] = React.useState(0);
const [minutesData, setMinutesData] = React.useState(0);
const [hoursData, setHoursData] = React.useState(0);
const [secondsInterval, setSecondsInterval] = React.useState(null);
function startTimer() {
if (start === 0) {
console.log('Started!!!');
setStart(1);
setSecondsInterval(
setInterval(function () {
setSecondsData((prevSecondsData) => {
if (prevSecondsData >= 59) {
setSecondsData(0);
setMinutesData((prevMinutesData) => {
if (prevMinutesData >= 59) {
setMinutesData(0);
setHoursData((prevHoursData) => prevHoursData + 1);
}
return (prevMinutesData + 1) % 60; // Обновляем минуты, учитывая переход через 60
});
} else {
return prevSecondsData + 1;
}
});
}, 1000),
);
} else {
alert('Timer is already started!');
}
};
function stopTimer() {
if (start == 1) {
setSecondsInterval(null);
clearInterval(secondsInterval);
setStart(0);
} else {
alert('Timer is already stopped!');
}
}
function endTimer() {
if (start == 1) {
setSecondsInterval(null);
clearInterval(secondsInterval);
setSecondsData(0);
setMinutesData(0);
setHoursData(0);
setStart(0);
} else {
alert('Timer is already ended!');
}
}
return (
<>
<div className='timer'>
<div className='timer__block'>
<div className='timer__spans'>
<span>{hoursData < 10 ? '0' + hoursData : hoursData}</span>
<span>:</span>
<span>{minutesData < 10 ? '0' + minutesData : minutesData}</span>
<span>:</span>
<span>{secondsData < 10 ? '0' + secondsData : secondsData}</span>
</div>
<div className='timer__btns'>
<button onClick={startTimer}>Start</button>
<button onClick={stopTimer}>Stop</button>
<button onClick={endTimer}>End</button>
</div>
</div>
</div>
</>
);
}
Источник: Stack Overflow на русском