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

129
Visualizações
El temporizador de cuenta regresiva que usa el componente funcional en ReactJS no funciona correctamente

Quiero hacer un temporizador de cuenta regresiva con botones de inicio, parada, reanudación y reinicio. Sin embargo, no pude entender por qué mi código no funciona. Supongo que el problema radica en la parte del temporizador, setInterval y clearInterval.

He adjuntado fragmentos de mi código a continuación.

La ayuda sería muy apreciada, gracias!

 function Countdown() { const [ timerRunning, setTimerRunning ] = useState(false); const [ startTime, setStartTime ] = useState(0); const [ totalTime, setTotalTime ] = useState(0); var timer; const startTimer = () => { setTimerRunning(true); setStartTime(totalTime); setTotalTime(totalTime); timer = setInterval(() => { const remainingTime = totalTime - 1000; if (remainingTime >= 0) { setTotalTime(remainingTime); } else { clearInterval(timer); setTimerRunning(false); setStartTime(0); setTotalTime(0); } }, 1000); }; const stopTimer = () => { clearInterval(timer); setTimerRunning(false); };
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

tienes que poner tu setInterval en React.useEffect echa un vistazo a esta publicación algunas sugerencias para tu código:

  • use className en lugar del atributo de clase en sus elementos.
  • no use var ni deje reaccionar componentes funcionales.
about 4 years ago · Juan Pablo Isaza Relatório

0

useState no cambia el valor inmediatamente. Por lo que su valor en realidad no está cambiando. Para evitar esto, use el gancho UseEffect .

 useEffect(() => { let intervalid if (timerRunning){ intervalid = setInterval(() => { const remainingTime = totalTime - 1000; if (remainingTime >= 0) { setTotalTime(remainingTime); } else { clearInterval(intervalid); setTimerRunning(false); setStartTime(0); setTotalTime(0); } }, 1000); } return () => { clearInterval(intervalid) } }, [timerRunning,totalTime])
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