Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

77
Visualizações
setTimeout in useEffect hook

I am attempting to make it so that a different page from an array is displayed every 5 seconds. I currently have it working, except the page isn't always switching every 5 seconds, but sometimes 10 or 15 seconds. I believe this to be because I am not clearing the timeout correctly, any suggestions?

const pages = [
    'screen1', 'screen2'
];

const [displayedPage, setDisplayedPage] = useState(pages[0]);
const [count, setCount] = useState(0);

   useEffect(() => {
    const timer: ReturnType<typeof setTimeout> = setTimeout(() => {
        const randomNumber = pages[Math.floor(Math.random() * pages.length)];

        if (randomNumber === displayedPage) {
            setCount(count + 1);
            clearTimeout(timer);
            return timer;
        }
        setDisplayedPage(randomNumber);
    }, 5000);

    return () => clearTimeout(timer);

});
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

To make everlasting cycles you should use setInterval, to avoid problems with rerenders you can useRef

const pages = [ 'screen1', 'screen2' ];

const [displayedPage, setDisplayedPage] = useState(0);
const [count, setCount] = useState(0);
const timer = useRef()

useEffect(() => {
  const timer.current = setInterval(() => {
    const randomNumber = Math.floor(Math.random() * pages.length);
    setCount(count + 1);
    setDisplayedPage(current => 
      randomNumber == current ? 
        pages[(current+1)%pages.length]
        :
        pages[randomNumber]
    );
  }, 5000);
  return () => clearInterval(timer.current);
});
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda