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

179
Visualizações
Gancho de estado que no cambia el valor booleano

En el siguiente código tengo un problema.

Estaba tratando de implementar comportamientos de doubleClick y el gancho de estado para que los cambios booleanos lo activen. El problema es que, aunque se activa la función handleDoubleClick , setAllowSingleClick no cambia el valor a falso, por lo que, de todos modos, se activa la función handleClick .

 <div onClick={handleClick} onDoubleClick={handleDoubleClick}>
 const CLICK_DELAY_TIME = 200; const [allowSingleClick, setAllowSingleClick] = useState(true); let timer = 0; const handleClick = () => { timer = setTimeout(() => { if (allowSingleClick) { doSMTH1(); } }, CLICK_DELAY_TIME); }; const handleDoubleClick = () => { clearTimeout(timer); setAllowSingleClick(false); doSMTH(); };
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

no useState() en devoluciones de llamada anidadas. useRef() en su lugar.

useState() en sí mismo es solo una especie de gancho que devuelve valor y setter (funciona de forma asíncrona).

cuando se construye la función de devolución de llamada setTimeout(), el valor de la variable allowSingleClick se fija en la definición de la función de devolución de llamada (este fenómeno se conoce como cierre).

lo que useRef() devuelve es objeto: valor evaluado cuando se hace referencia a la propiedad .current .

código de ejemplo

 import React from "react"; import { useRef } from "react"; function App() { const CLICK_DELAY_TIME = 200; const allowSingleClickRef = useRef(true); const doSMTH1 = () => console.log("!!!"); const doSMTH = () => console.log("???"); let timer = null; const handleClick = () => { timer = setTimeout(() => { if (allowSingleClickRef.current) { doSMTH1(); } }, CLICK_DELAY_TIME); }; const handleDoubleClick = () => { clearTimeout(timer); allowSingleClickRef.current = false; doSMTH(); }; return ( <div style={{ backgroundColor: "red", width: "100vw", height: "100vh" }} onClick={handleClick} onDoubleClick={handleDoubleClick} /> ); } export default App;

Más lecturas: Haciendo setInterval Declarative con React Hooks por Dan Abramov

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