En JavaScript y, específicamente con React, controlar eventos de clic puede ser fundamental para la interactividad de una aplicación web. Sin embargo, algo tan simple como asignar una ejecución de función al evento de clic puede plantearte dudas en cuanto a la sintaxis correcta.
La pregunta del quiz se refiere a la forma correcta de asignar un manejador de eventos de clic a un botón que podemos llamar foo
en React. La respuesta correcta es <button onClick={this.foo}>
.
Para entender esto a fondo, desglosemos la respuesta.
React tiene una forma particular de manejar los eventos del DOM. En lugar de asignar manejadores de eventos mediante el atributo onclick
de HTML (en minúscula)
, React utiliza onClick
con la "C" en mayúscula. Esta es una convención de nomenclatura en React que indica que este no es el evento de clic HTML estándar, sino un evento de clic sintético de React.
Al especificar this.foo
, podríamos decir que estamos vinculando el método foo
del contexto actual (this
) al manejador de eventos de onClick
.
La razón principal por la que usamos this.foo
en lugar de this.foo()
es porque queremos referirnos al método, no invocarlo. Si incluyes los paréntesis después del nombre de la función, estás invocando la función inmediatamente cuando el componente se renderiza, no cuando se produce el evento de clic.
Supón que tienes un componente en React y quieres manejar un evento de clic en un botón. Podría verse algo como esto:
class MyButton extends React.Component {
foo() {
console.log('¡El botón fue clickeado!');
}
render() {
return (
<button onClick={this.foo}>
Click me!
</button>
);
}
}
Cuando hagas clic en este botón, se ejecutará el método foo
, y verás "¡El botón fue clickeado!" en la consola.
Un punto a tener en cuenta al usar this.foo
como manejador de eventos es que debes garantizar que this
esté vinculado correctamente en el método que estás pasando. En JavaScript, el valor de this
no es automático, puede cambiar dependiendo del contexto. Si estás usando una versión estándar de ECMAScript puedes vincular el método en el constructor:
constructor(props) {
super(props);
this.foo = this.foo.bind(this);
}
Sin embargo, si estás usando las capacidades modernas de Babel, puedes usar las funciones de flecha automáticas de ES6 para manejar el enlace:
foo = () => {
console.log('¡El botón fue clickeado!');
}
En resumen, la sintaxis correcta para manejar onClick en un botón en React implica usar la nomenclatura de evento con camel case (onClick
), y pasando el método como una referencia sin invocarlo directamente. Además, hay que tener en cuenta el correcto enlace de this
para que el método funcione como se espera.