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

83
Visualizações
¿Por qué `setTimeout` llama más de una vez cuando uso `useState`?

Estoy tan confundido acerca de useState en los ganchos React.

No sé por qué console.log en la función setTimeout llama más de una vez cuando uso useState .

Si useState , normalmente llama solo una vez. Y si uso Class state en lugar de ganchos, normalmente también llama solo una vez.

¿Por qué sucede eso? ¿Y cómo puedo manejarlo?

(aquí está mi código)

 import React, { useState, useEffect } from "react"; import "./App.css"; const usePassword = () => { const [passwordValue, setPasswordValue] = useState({ password: "", passwordHidden: "", }); let timer = null; const trigger = () => { clearTimeout(timer); timer = setTimeout(() => console.log("end"), 1000); }; const onPasswordChanged = (name, value) => { setPasswordValue((prev) => ({ ...passwordValue, passwordHidden: value })); trigger(); }; return { passwordValue, onPasswordChanged }; }; function App() { const { passwordValue, onPasswordChanged } = usePassword(); const onChanged = (event) => { const { name, value } = event.target; onPasswordChanged(name, value); }; const onSubmit = () => { console.log("submitted!", passwordValue); }; return ( <div className="App"> <header className="App-header"> <input name="password" onKeyUp={onChanged} /> <button onClick={onSubmit}>Submit</button> </header> </div> ); } export default App;
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Cada vez que establece el estado usando useState , obtiene una nueva variable de timer , ya que la función se llama nuevamente. Es por eso que su clearTimeout no funciona.

Puede usar una ref para mantener el valor entre los ciclos de renderizado:

 const timer = useRef(null); const trigger = () => { clearTimeout(timer.current); timer.current = setTimeout(() => console.log("end"), 1000); };

Editar competente-goldstine-jbt3t

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