useEffect
функция оценивается только один раз при монтировании компонента, когда предоставляется пустой список ввода.
Альтернативой setInterval
является установка нового интервала с помощью setTimeout
каждый раз при обновлении состояния:
const [time, setTime] = React.useState(0);
React.useEffect(() => {
const timer = setTimeout(() => {
setTime(time + 1);
}, 1000);
return () => {
clearTimeout(timer);
};
}, [time]);
Влияние на производительность setTimeout
незначительно и обычно может быть проигнорировано.Если компонент не чувствителен ко времени до точки, в которой вновь установленные таймауты вызывают нежелательные эффекты, подходы setInterval
и setTimeout
являются приемлемыми.