Al trabajar con eventos en React, es común cometer el error de ejecutar una función inmediatamente en lugar de asignarla correctamente al evento.
Se ejecuta solo cuando ocurre el evento.
onClick={() => onSaludo("Urian")} Se ejecuta inmediatamente al renderizar el componente, causando errores.
onClick={onSaludo("Urian")} | Código | Comportamiento |
|---|---|
onClick={() => onSaludo("Urian")} | La función se ejecuta solo cuando se hace clic. ✅ |
onClick={onSaludo("Urian")} | La función se ejecuta inmediatamente al renderizar. ❌ |
Si la función onSaludo("Urian") se ejecuta inmediatamente, significa que React intentó ejecutar la función al renderizar el componente, lo cual no es correcto.
onClick={funcion} cuando NO hay argumentosSi la función no necesita parámetros, puedes pasarla directamente:
<button onClick={handleClick}>Haz clic</button> Esto es válido porque handleClick es solo la referencia a la función, sin ejecutarla.
onClick={() => funcion(argumentos)} cuando SÍ hay argumentosSi la función requiere argumentos, usa una función anónima:
<button onClick={() => onSaludo("Urian")}>Saludar</button> Así, la función onSaludo("Urian") solo se ejecutará cuando el usuario haga clic.
function App() {
function onSaludo(nombre) {
alert(`Hola, ${nombre}!`);
}
return (
// ERROR: Se ejecuta en el render
<button onClick={onSaludo("Urian")}>Saludar</button>
);
} Aquí, onSaludo("Urian") se ejecuta al renderizar el componente, lo cual es incorrecto.
function App() {
function onSaludo(nombre) {
alert(`Hola, ${nombre}!`);
}
return (
// Se ejecuta solo al hacer clic
<button onClick={() => onSaludo("Urian")}>Saludar</button>
);
} Aquí, onSaludo("Urian") solo se ejecuta cuando se hace clic.
function App() {
function handleClick() {
alert("Botón clickeado!");
}
return (
// No necesita argumentos, se pasa directamente
<button onClick={handleClick}>Clic aquí</button>
);
} Aquí no hay necesidad de usar () => {} porque handleClick no recibe parámetros.
function App() {
function mostrarMensaje(mensaje) {
alert(mensaje);
}
return (
<>
<button onClick={() => mostrarMensaje("Hola desde el botón 1!")}>Botón 1</button>
<button onClick={() => mostrarMensaje("Hola desde el botón 2!")}>Botón 2</button>
</>
);
} Se usa () => mostrarMensaje("mensaje") para evitar la ejecución inmediata.
| Caso | Código | Correcto |
|---|---|---|
| Llamar función sin argumentos | button onClick={handleClick} | Sí |
| Llamar función con argumentos | button onClick={() => onSaludo("Urian")} | Sí |
| Ejecutar función inmediatamente | button onClick={onSaludo("Urian")} | ❌ No |