Работа с setinterval

У меня есть конпка по которой я включаю и выключаю подрузку картинок

  const [rep, setRep] = useState(false);

 
  var idInterval;
  const onRepeatClicked = () => {
    setRep(!rep);
    idInterval = setInterval(() => {
      if (!rep) {
        dispatch(getCat());
      }else{
        clearInterval(idInterval);
      }
    }, 2000);

Если я нажимаю чек бокс, то срабатывает onRepeatClicked и картинки начинают подгружаться каждый 2 сек, но если я выключаю чек бокс ,то они так же продолжают загружаться, я очищаю интервал, но почему-то затем срабатывает диспатч, подскажите в чём проблема?


Ответы (1 шт):

Автор решения: Алексей

Можно через useEffect подписаться на изменение rep и в зависимости от значения удалять/запускать интервал.

Пример на stackblitz.com

const [rep, setRep] = useState(false);

useEffect(() => {
let interval;
if (rep) {
  interval = setInterval(() => {
    console.log('dispatch');
  }, 2000);
}
return () => clearInterval(interval);
}, [rep]);

return (
<div>
  <input
    type="checkbox"
    onChange={() => setRep((prevState) => !prevState)}
    checked={rep}
  />
</div>
)}
→ Ссылка