Я создаю таймер обратного отсчета с помощью React и столкнулся с этим: clearInterval работает onCklick, если он не обновляет компонент. Если я обновляю состояние в интервале, функция clearInterval больше не очищает интервал. Я так понимаю, что это связано с перерисовкой компонента? Вот соответствующая часть кода. Советы очень ценятся:
const [sessionCount, setSessionCount] = useState(25);
const [timeLeft, setTimeLeft] = useState("25:00")
var timer ;
function startHandle() {
let endTime = (sessionCount * 60000) + +new Date();
timer = setInterval(function() {
let diff = endTime - +new Date();
const min = Math.floor(diff / 60000);
const sec = Math.floor((diff / 1000) % 60);
setTimeLeft(min + ":" + sec) //if this line is removed, then clearInterval works
}, 1000)
};
function resetHandle() {
setTimeLeft("25:00");
clearInterval(timer);
};
<div id="time-display-container">
<div id="timer-label">Session</div>
<time id="time-left"></time>
<button id="start_stop" onClick={startHandle}>start/stop</button>
<button id="reset" onClick={resetHandle}>reset</button>
</div>
timer
не сохраняет свое последнее значение. Лучше сохраните его вref
, используяuseRef
, чтобы сохранить его значения между повторными рендерингами. - person Rohit Khanna   schedule 25.01.2021