Manejo de Eventos
Responder a las interacciones del usuario en React
Eventos en React
React maneja eventos de forma similar a HTML, pero con algunas diferencias sintacticas. Los eventos en React usan camelCase (onClick en vez de onclick) y pasas funciones como manejadores de eventos.
Sintaxis Basica de Eventos
function Boton() {
const handleClick = () => {
alert('Boton clickeado!');
};
return (
<button onClick={handleClick}>
Hazme clic
</button>
);
}
// Funcion inline (para logica simple)
function Boton() {
return (
<button onClick={() => alert('Clickeado!')}>
Hazme clic
</button>
);
}
Eventos Comunes
function FormularioDemo() {
return (
<div>
{/* Eventos de Mouse */}
<button onClick={() => console.log('click')}>Click</button>
<div onMouseEnter={() => console.log('mouse enter')}>Hover</div>
<div onMouseLeave={() => console.log('mouse leave')}>Dejar hover</div>
{/* Eventos de Formulario */}
<input onChange={(e) => console.log(e.target.value)} />
<form onSubmit={(e) => { e.preventDefault(); console.log('enviado'); }}>
<button type="submit">Enviar</button>
</form>
{/* Eventos de Teclado */}
<input onKeyDown={(e) => console.log('tecla:', e.key)} />
{/* Eventos de Foco */}
<input onFocus={() => console.log('enfocado')} />
<input onBlur={() => console.log('perdio foco')} />
</div>
);
}
El Objeto Evento
function ManejoEventos() {
const handleClick = (evento) => {
console.log('Tipo:', evento.type);
console.log('Target:', evento.target);
console.log('Coordenadas:', evento.clientX, evento.clientY);
};
const handleSubmit = (evento) => {
evento.preventDefault(); // Previene el comportamiento por defecto
console.log('Formulario enviado');
};
return (
<form onSubmit={handleSubmit}>
<button onClick={handleClick}>Click</button>
</form>
);
}
Pasando Argumentos a Manejadores
function Lista() {
const items = ['Manzana', 'Banana', 'Cereza'];
const handleClick = (item, indice) => {
console.log(`Clickeaste ${item} en indice ${indice}`);
};
return (
<ul>
{items.map((item, indice) => (
<li key={item}>
<button onClick={() => handleClick(item, indice)}>
{item}
</button>
</li>
))}
</ul>
);
}
Consejos Importantes
- Pasa funciones, no las llames: onClick={handleClick} no onClick={handleClick()}
- preventDefault(): Usalo para prevenir comportamiento por defecto del navegador
- stopPropagation(): Para detener la propagacion del evento