Я думаю, что, остановив, вы хотите сказать clearInterval
о событии клика. Так что лучший способ сохранить идентификатор интервала в новой переменной состояния.
const IntervalExample = () => {
const [seconds, setSeconds] = useState(0);
const [currentIntervalId, setIntervalId] = useState(null);
useEffect(() => {
const interval = setInterval(() => {
setSeconds(seconds => seconds + 1);
}, 1000);
setIntervalId(interval);
return () => clearInterval(interval);
}, []);
const stopInterval = () => {
clearInterval(currentIntervalId);
};
return (
<div className="App">
<header className="App-header" onClick={stopInterval}>
{seconds} seconds have elapsed since mounting.
</header>
</div>
);
};
- Почему в состоянии? Потому что это даст вам больше гибкости, чтобы перезапустить интервал снова или остановить, когда вы хотите, основываясь на событии.
Примечание: Вы также можете поместить это в переменную, определенную вне область действия useEffect
.