Мне интересно, как правильно и наилучшим образом очистить тайм-ауты / интервалы при использовании перехватчиков React. Например, у меня есть следующий код:
import React, { useState, useEffect, useRef } from 'react';
const Test = () => {
const id = useRef(null)
const [count, setCount] = useState(5)
const [timesClicked, setTimesClicked] = useState(0)
if (!count) {
clearInterval(id.current)
}
useEffect(() => {
id.current = setInterval(() => {
setCount(count => count -1)
}, 1000)
return () => {
clearInterval(id.current)
}
}, [])
const onClick = () => setTimesClicked(timesClicked => timesClicked + 1)
return (
<div>countdown: {count >= 0 ? count : 0}
<hr />
Clicked so far: {timesClicked}
{count >= 0 && <button onClick={onClick}>Click</button>}
</div>
)
}
Когда count
равно 0, интервал очищается в теле функции Test
. В большинстве примеров, которые я видел в Интернете, интервал очищается внутри useEffect
, это обязательно?