What is the event target property in react?

Descifrando event.target: La clave de la interaccion en JavaScript

hace 10 años

★★★★★Valoración: 4.44 (5601 votos)

Cuando te adentras en el mundo del desarrollo web con JavaScript, te encuentras con la necesidad de hacer que tus páginas web sean interactivas. Para lograr esto, debes entender cómo manejar los eventos. Un concepto fundamental dentro del manejo de eventos es event.target. Este objeto, a menudo subestimado por principiantes, es una herramienta poderosa que te permite acceder al elemento HTML exacto que originó un evento. En este artículo, exploraremos en profundidad las propiedades de event.target, proporcionando ejemplos claros y prácticos para que puedas dominarlo y llevar tus habilidades de JavaScript al siguiente nivel.

What are the properties of event target?
The target property returns the element where the event occured. The target property is read-only. The target property returns the element on which the event occurred, opposed to the currentTarget property, which returns the element whose event listener triggered the event.
Índice de Contenido

¿Qué es event.target en JavaScript?

En esencia, event.target es una propiedad de un objeto de evento en JavaScript. Cuando ocurre un evento en un elemento HTML (como un clic, un cambio en un campo de texto o el mouse pasando por encima), se crea un objeto de evento. Este objeto contiene información detallada sobre el evento que acaba de ocurrir. event.target, dentro de este objeto de evento, siempre referencia al elemento HTML que originalmente disparó el evento. Es crucial entender que no siempre es el elemento al que se adjuntó el listener del evento, sino el elemento que realmente originó la acción.

Imagina una situación donde tienes un div contenedor y dentro de él varios botones. Si adjuntas un listener de evento de clic al div, y luego haces clic en uno de los botones, event.target dentro del listener del div será el botón que se clicó, no el div en sí. Este comportamiento, conocido como delegación de eventos, es una técnica poderosa para optimizar el rendimiento y la organización de tu código JavaScript.

Propiedades clave de event.target

event.target es un nodo del DOM (Document Object Model), y como tal, hereda todas las propiedades y métodos de los nodos del DOM. Aquí te presentamos algunas de las propiedades más útiles y comunes que puedes utilizar con event.target:

  • tagName: Esta propiedad te devuelve el nombre de la etiqueta HTML del elemento target en mayúsculas. Por ejemplo, si el event.target es un botón, event.target.tagName devolverá "BUTTON". Es muy útil para identificar rápidamente el tipo de elemento que originó el evento.
  • id: Si el elemento target tiene un atributo id definido, esta propiedad te devolverá el valor de ese id como una cadena de texto. Si el elemento no tiene un id, devolverá una cadena vacía.
  • className: Similar a id, esta propiedad te devuelve el valor del atributo class del elemento target como una cadena de texto. Si el elemento tiene múltiples clases, te las devolverá todas separadas por espacios. Si no tiene ninguna clase, devolverá una cadena vacía.
  • textContent o innerText: Estas propiedades te permiten acceder al contenido de texto del elemento target. textContent devuelve el texto de todos los descendientes del nodo, incluyendo el texto de los elementos de script y style, mientras que innerText, que es más específico para navegadores web, solo devuelve el texto "renderizado", respetando el estilo CSS y ocultando elementos que no son visibles. En la mayoría de los casos para manipular contenido visible, innerText es más adecuado.
  • value: Esta propiedad es especialmente útil cuando trabajas con elementos de formulario como <input>, <select> o <textarea>. Devuelve el valor actual del elemento del formulario. Por ejemplo, si event.target es un campo de texto, event.target.value te dará el texto que el usuario ha introducido en ese campo.
  • style: Esta propiedad te da acceso al atributo style del elemento target como un objeto. Puedes utilizar este objeto para leer o modificar los estilos CSS en línea del elemento de manera dinámica desde JavaScript.
  • dataset: Si has utilizado atributos de datos personalizados (atributos que comienzan con data-) en tu HTML, puedes acceder a ellos a través de la propiedad dataset de event.target. dataset es un objeto donde las claves son los nombres de los atributos de datos (sin el prefijo data-) y los valores son los valores de esos atributos.
  • attributes: Esta propiedad devuelve un objeto NamedNodeMap que contiene todos los atributos HTML del elemento target. Puedes iterar sobre este objeto para acceder a los nombres y valores de todos los atributos del elemento.

Ejemplos prácticos de event.target

Para entender mejor cómo usar event.target, veamos algunos ejemplos prácticos:

Ejemplo 1: Cambiar el color de fondo al hacer clic

const contenedor = document.getElementById('contenedor'); contenedor.addEventListener('click', function(event) { const elementoClicado = event.target; elementoClicado.style.backgroundColor = 'lightblue'; }); 

En este ejemplo, adjuntamos un listener de evento de clic al elemento con el id "contenedor". Cuando se hace clic en cualquier elemento dentro del contenedor, la función anónima se ejecuta. Dentro de la función, event.target representa el elemento específico que se clicó, y cambiamos su color de fondo a azul claro.

What are target properties?
Definition and Usage The target property is a shorthand property for setting the target-name, target-new, and target-position properties.

Ejemplo 2: Obtener el texto de un botón clicado

const botones = document.querySelectorAll('.mi-boton'); botones.forEach(boton => { boton.addEventListener('click', function(event) { const botonClicado = event.target; alert('Hiciste clic en el botón: ' + botonClicado.textContent); }); }); 

Aquí, seleccionamos todos los elementos con la clase "mi-boton" y adjuntamos un listener de evento de clic a cada uno. Cuando se clica un botón, mostramos una alerta con el texto del botón clicado, utilizando la propiedad textContent de event.target.

Ejemplo 3: Delegación de eventos para una lista

const lista = document.getElementById('lista-items'); lista.addEventListener('click', function(event) { if (event.target.tagName === 'LI') { event.target.classList.toggle('seleccionado'); } }); 

En este ejemplo de delegación de eventos, adjuntamos un listener de clic a la lista desordenada (<ul>) con el id "lista-items". Dentro del listener, verificamos si el event.target es un elemento de lista (<li>) usando event.target.tagName. Si es un elemento de lista, añadimos o removemos la clase "seleccionado" del elemento, permitiendo marcar o desmarcar elementos de la lista con un solo listener en el contenedor padre.

Confusión común: event.target vs. CSS target

Es importante no confundir event.target en JavaScript con la propiedad CSS target. Aunque comparten el nombre, son conceptos completamente diferentes y se utilizan en contextos distintos.

What are the properties of an event?
Event Properties are individual pieces of data that an event holds. Think of them as the details that make an event unique. Event properties vary based on the event. Event property names and values are case-sensitive.

La propiedad CSS target es una propiedad abreviada que se utiliza para controlar cómo se abren los enlaces (<a>). Permite especificar si los enlaces deben abrirse en una nueva ventana, una nueva pestaña o en la misma ventana, y cómo se posiciona la nueva ventana o pestaña. Por ejemplo, target: new front; en CSS intentaría abrir todos los enlaces en una nueva ventana que se coloca al frente de otras ventanas. Sin embargo, la propiedad CSS target tiene muy poco o ningún soporte en los navegadores modernos y generalmente no se utiliza en el desarrollo web actual. Cuando se habla de controlar cómo se abren los enlaces, se suele utilizar el atributo target directamente en la etiqueta <a> en HTML (por ejemplo, <a href="..." target="_blank"> para abrir en una nueva pestaña).

En resumen, event.target en JavaScript es para identificar el elemento que originó un evento, mientras que la propiedad CSS target (que prácticamente no se usa) intentaba controlar el destino de los enlaces. Son conceptos separados y no relacionados en la práctica diaria del desarrollo web.

Event properties en general

event.target es solo una de las muchas propiedades disponibles en un objeto de evento en JavaScript. Los objetos de evento contienen una gran cantidad de información sobre el evento que ocurrió, y las propiedades disponibles varían dependiendo del tipo de evento. Algunas propiedades comunes de los objetos de evento, además de target, incluyen:

  • type: Indica el tipo de evento que ocurrió (por ejemplo, "click", "mouseover", "keydown").
  • currentTarget: Referencia al elemento al que se adjuntó el listener de evento. En el contexto de la delegación de eventos, currentTarget sería el elemento contenedor al que adjuntaste el listener, mientras que target sería el elemento hijo que originó el evento.
  • timeStamp: Devuelve un número que representa el momento (en milisegundos desde el inicio de la época Unix) en que ocurrió el evento.
  • preventDefault(): Un método que puedes llamar en el objeto de evento para prevenir la acción por defecto asociada con el evento. Por ejemplo, en un evento de envío de formulario (submit), event.preventDefault() evitará que el formulario se envíe de la manera tradicional, permitiéndote manejar el envío con JavaScript.
  • stopPropagation(): Un método para detener la propagación del evento a través del DOM. Normalmente, los eventos en el DOM tienen una fase de "burbujeo" (bubbling) en la que el evento se propaga hacia arriba en el árbol del DOM desde el elemento target hasta el elemento raíz. stopPropagation() detiene esta propagación.
  • clientX y clientY: Para eventos de ratón, estas propiedades proporcionan las coordenadas X e Y del puntero del ratón en el momento en que ocurrió el evento, relativas al área visible del navegador (viewport).
  • key y keyCode: Para eventos de teclado, estas propiedades proporcionan información sobre la tecla que se presionó. key devuelve una cadena que representa la tecla presionada (por ejemplo, "Enter", "a", "Shift"), mientras que keyCode devuelve un número que representa el código de la tecla (aunque keyCode está en desuso en favor de key y code).

Explorar las propiedades específicas de los objetos de evento para diferentes tipos de eventos te permitirá crear interacciones web mucho más ricas y personalizadas.

What are the properties of event target?
The target property returns the element where the event occured. The target property is read-only. The target property returns the element on which the event occurred, opposed to the currentTarget property, which returns the element whose event listener triggered the event.

event.target en React

En React, event.target funciona de manera muy similar a como lo hace en JavaScript vanilla. Cuando manejas eventos en React, el objeto de evento que se pasa a tus handlers de eventos es un evento sintético que React envuelve alrededor del evento nativo del navegador. Sin embargo, event.target dentro de un evento sintético de React sigue referenciando al elemento del DOM que originó el evento.

La pregunta planteada sobre cómo dar borde a un div en un componente padre de React cuando se hace clic en un input dentro de un componente hijo, no se resuelve directamente con event.target. Si bien event.target te dará el input que se clicó, necesitas un mecanismo para comunicar este evento desde el componente hijo al componente padre para que el padre pueda modificar su propio estilo. Esto se suele lograr utilizando props de callback o gestión de estado compartido (como Context API o bibliotecas de gestión de estado como Redux o Zustand). En React, el enfoque se centra más en la comunicación entre componentes y la gestión del estado de la aplicación que en manipular directamente el DOM utilizando event.target para interacciones complejas entre componentes anidados.

Conclusión

event.target es una propiedad fundamental para entender y manipular la interacción del usuario en tus páginas web con JavaScript. Dominar sus propiedades y cómo utilizarlo en diferentes escenarios, incluyendo la delegación de eventos, te permitirá escribir código más eficiente, organizado y reactivo. Aunque a veces se confunde con la propiedad CSS target (que es obsoleta), event.target en JavaScript sigue siendo una herramienta esencial en el arsenal de cualquier desarrollador web moderno. Explora las diferentes propiedades de event.target, experimenta con ejemplos prácticos y verás cómo puedes llevar la interactividad de tus proyectos web a un nuevo nivel.

Subir