Manejo de Eventos en React
El manejo de eventos en React es similar al manejo de eventos en JavaScript nativo, pero con diferencias importantes en la sintaxis y el enfoque. React utiliza un sistema de delegación de eventos que mejora el rendimiento y la compatibilidad entre navegadores.
¿Qué son los eventos en React?
Los eventos son acciones o interacciones del usuario con la interfaz de una aplicación, como hacer clic en un botón, mover el ratón o escribir en un campo de texto. React gestiona estos eventos mediante su propio sistema, que encapsula los eventos nativos del navegador.
Sintaxis básica
En React, los eventos se manejan pasando funciones como valores de atributos en JSX. Los nombres de los eventos utilizan camelCase en lugar de kebab-case, y los manejadores de eventos son funciones en lugar de cadenas de texto.
Ejemplo básico
function App() {
const handleClick = () => {
alert('¡Botón clicado!');
};
return <button onClick={handleClick}>Haz clic</button>;
}Eventos comunes
React admite una amplia variedad de eventos que puedes manejar en tus componentes. Aquí tienes algunos de los más comunes:
Eventos de mouse
onClick: Se activa al hacer clic en un elemento.onMouseEnter: Se activa al mover el puntero sobre un elemento.onMouseLeave: Se activa al mover el puntero fuera de un elemento.
Eventos de teclado
onKeyDown: Se activa al presionar una tecla.onKeyUp: Se activa al soltar una tecla.onKeyPress: (Obsoleto) Similar aonKeyDown, pero menos preciso.
Eventos de formulario
onChange: Se activa al cambiar el valor de un campo.onSubmit: Se activa al enviar un formulario.
Ejemplo
function Form() {
const handleChange = (event) => {
console.log('Valor:', event.target.value);
};
const handleSubmit = (event) => {
event.preventDefault();
alert('Formulario enviado');
};
return (
<form onSubmit={handleSubmit}>
<input type="text" onChange={handleChange} />
<button type="submit">Enviar</button>
</form>
);
}Propagación de eventos
En React, los eventos se propagan desde el elemento donde ocurrieron hacia sus ancestros (bubbling). Puedes controlar este comportamiento utilizando el método stopPropagation.
Ejemplo
function Parent() {
const handleParentClick = () => {
console.log('Clic en el padre');
};
const handleChildClick = (event) => {
event.stopPropagation();
console.log('Clic en el hijo');
};
return (
<div onClick={handleParentClick} style={{ padding: '20px', background: '#f0f0f0' }}>
<button onClick={handleChildClick}>Hijo</button>
</div>
);
}En este ejemplo, el clic en el botón no activará el evento del contenedor debido al uso de stopPropagation.
Binding de métodos
En componentes de clase, los métodos no están vinculados automáticamente al contexto del componente. Esto puede causar problemas al usar this en manejadores de eventos.
Solución con binding manual
class App extends React.Component {
constructor(props) {
super(props);
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
console.log('Clicado:', this);
}
render() {
return <button onClick={this.handleClick}>Haz clic</button>;
}
}Solución con funciones flecha
class App extends React.Component {
handleClick = () => {
console.log('Clicado:', this);
};
render() {
return <button onClick={this.handleClick}>Haz clic</button>;
}
}Eventos personalizados
Puedes definir eventos personalizados pasando funciones desde un componente padre a un componente hijo como props.
Ejemplo
function Child({ onAction }) {
return <button onClick={() => onAction('Evento personalizado')}>Haz clic</button>;
}
function Parent() {
const handleAction = (message) => {
alert(message);
};
return <Child onAction={handleAction} />;
}Conclusiones
El manejo de eventos en React es un proceso sencillo y poderoso que permite capturar y responder a interacciones del usuario. Dominar los eventos y su propagación es clave para crear interfaces interactivas y dinámicas.
