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

414
Visualizações
Cuándo usar onclick ={ myfuntion()} vs onclick={() => (myfunction())}

¿Por qué la identificación no está definida en la función randomCard cuando se usa onClick= {(randomCard()} y se define cuando se usa onClick = {() => (randomCard())}?

 function Home() { const [cardlist, setCardList] = useState([]); const navigate = useNavigate() function randomCard() { const index = Math.floor(Math.random() * cardlist.length); const id = cardlist[index].id; navigate(`/cards/${id}`) } useEffect(() => { async function fetchData() { const res = await axios.get('https://db.ygoprodeck.com/api/v7/cardinfo.php'); const results = res.data; setCardList(results.data); console.log(cardlist); } fetchData(); }, []) return ( <div className='home'> <h1>Welcome to the Yu-Gi-Oh Database</h1> <p>Choose Option</p> <div className="options"> <ul> <li><a href='/allcards'>Show All Cards</a></li> <li><a href='/'>Search Card</a></li> <li><a href='' onClick={() => (randomCard())}>Random Card</a></li> </ul> </div> </div> ) }
about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Uno solo usaría algo como

 onClick={randomCard()}

cuando esa función devuelve una función . Esta situación no es infrecuente, por ejemplo:

 const makeHandleClick = (id) => () => { setClickedId(id); };
 onclick={makeHandleClick(id))

Pero es un error común usar onClick={randomCard()} cuando en realidad solo desea ejecutar la función cuando se hace clic en el elemento, en cuyo caso ejecutará la función inmediatamente, cuando se represente, en lugar de cuando se haga clic (y a menudo dan como resultado demasiadas re-renderizaciones y un error).

Usar

 onClick={randomCard}

cuando desea que la función se ejecute cuando se hace clic en el elemento, y no cuando se representa el elemento.

Lo anterior es a menudo equivalente a

 onClick={() => randomCard()}
about 4 years ago · Juan Pablo Isaza Relatório

0

En React, el valor de onClick debe ser una devolución de llamada que devuelve algo (vacío) :

 onClick={() => { console.log('clicked')} }

Entonces, al pasar functions() como un valor a onClick, se ejecutará cuando el componente se represente. En su caso, onClick={randomCard()} se ejecutará antes de que ocurra la obtención de datos, lo que significa que la id de la tarjeta no está undefined . El siguiente código de ejemplo se registrará en la consola al renderizar y no al hacer clic:

 // Outputs console log on render only function doSomething() { console.log('executed without click event') } return( <button type="button" onClick={doSomething()} > )

Si está utilizando Typescript, verá un error al escribir:

Type 'void' is not assignable to type 'MouseEventHandler<HTMLButtonElement> | undefined'. Esto significa que estamos ejecutando JS (void) en lugar de pasar una devolución de llamada (MouseEventHandler) como valor.

A diferencia del manejo de eventos HTML DOM, donde puede pasar cualquier código JS como una cadena para hacer onclick y activará una función cuando se haga clic en un elemento. Por ejemplo:

 // All work <button onclick="document.getElementById('demo').innerHTML=1">Click me</button> <button onclick="console.log('Hi')">Click me</button> <button onclick="alert('Hi')">Click me</button> <button onclick="greet()">Click me</button> <p id="demo"></p> function greet() { document.getElementById("demo").innerHTML = "Hello World"; }
about 4 years ago · Juan Pablo Isaza Relatório

0

La respuesta clave a su pregunta es comprender la diferencia entre:

  • Llamar onClick={() => (randomCard())} esto es llamar a pedido
  • Ejecute onClick= {randomCard()} y esto es solo una ejecución inmediata

Le sugiero que investigue un poco para que le quede más claro, pero en pocas palabras, onClick={() => (randomCard())} esto se llama cuando hace clic en él y onClick= {randomCard()} esto se llama cuando se carga el archivo.

Cuando utilice "Ejecutar", sus datos no se obtendrán y se llamará a la función antes de que se asigne el valor setCardList a cardList. Pero cuando usa "Llamar", sus datos ya se han obtenido, y cardList contiene una matriz de datos.

Espero no haberlo confundido, solo investigue un poco y lo obtendrá, es muy simple, solo necesita obtener el flujo de renderizado del componente.

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