Lección 13. Eventos Nativos, Sintéticos y Personalizados.

Para una mejor comprensión y contenido de este tema:

SyntheticEvent – React (reactjs.org

El ejemplo de un evento nativo y un sinthetic event.

Copiar código
import React, { Component } from "react";

export default class MasSobreEventos extends Component {

  handleClick = (e) => {
    
    //Evento sintetico de REACT
    console.log(e);
		
    //Impresion del elemento JSX (HTML) en la que se hace el evento
    console.log(e.target);
		
    //Evento nativo de vanila JS
    console.log(e.nativeEvent);
		
    //Impresion del elemento JSX (HTML) del evento nativo
    console.log(e.nativeEvent.target);
  }

  render () {
    return (
      <div>
        <h2>
          Mas sobre eventos
        </h2>
        <button onClick={this.handleClick}>
          Saludar
        </button>
      </div>
    )
  }
}

Hagamos un poco más complejo el evento, pasando parámetros.

Pasando parámetros a eventos._

Enviemos un mensaje al evento y que este se imprima en consola.

Copiar código
import React, { Component } from "react";

export default class MasSobreEventos extends Component {

  handleClick = (e, mensaje) => {
    
    //Evento sintetico de REACT
    console.log(e);
		
    //Impresion del elemento JSX (HTML) en la que se hace el evento
    console.log(e.target);
		
    //Evento nativo de vanila JS
    console.log(e.nativeEvent);
		
    //Impresion del elemento JSX (HTML) del evento nativo
    console.log(e.nativeEvent.target);

    //Impresion de mensaje
    console.log(mensaje);
  }

  render () {
    return (
      <div>
        <h2>
          Mas sobre eventos
        </h2>

        <button onClick={(e) => this.handleClick(e, "Hola, pasando parametro desde un evento")}>
          Saludar
        </button>
      </div>
    )
  }
}

Con ayuda de una Arrow function podemos obtener un parámetro de un evento.

Eventos personalizados._

Los eventos personalizados son eventos que queremos asignar a un nuevo componente desde otro.

Pongamos el siguiente código para ejemplo:

Copiar código
export default function Boton () {
  return (
    <button>
      Boton hecho componente
    </button>
  )
}

Creamos un nuevo componente en un nuevo archivo e importamos el componente al MasSobreEventos.

Copiar código
import Boton from "Boton.jsx";

Renderizamos el componente Boton dentro de MasSobreEventos y le asignamos el evento creado anteriormente (handleClick).

Agregamos al JSX el código:

Copiar código
<Boton onClick={(e) => this.handleClick(e, "Hola, pasando parametro desde un evento")}/>

Intentando que cada que el evento onClick se realice, se ejecute la función handleClick.

Nota: Sin embargo... ESTO NO FUNCIONARA, NUESTRA FUNCION NO SE EJECUTARA AL DAR CLICK EN EL COMPONENTE EXTERNO.

Para ello es necesario los eventos personalizados.

Lo único a hacer es pasar el evento como una props al componente.

Copiar código
<Boton myOnClick={(e) => this.handleClick(e, "Hola, pasando parametro desde un evento")}/>

Pasamos al componente Boton, una props llamada "myOnClick", que es una Arrow function a un evento.

También necesitamos modificar nuestro componente.

¡UNICAMENTE RECIBIENDO LAS PROPS! Y ¡ASIGNANDO COMO EVENTO onClick LA PROP!

Copiar código
export default function Boton (props) {
  return (
    <button onClick={props.myOnClick}>
      Boton hecho componente
    </button>
  )
}

De esta manera nuestro componente Boton ya tiene el evento.

A esto se le llama un Evento Personalizado.

LOS "ATRIBUTOS DE EVENTOS" SON PARA LAS ETIQUETAS JSX, ¡NO PARA LOS COMPONENTES!

Esto No funciona:

Copiar código
<Boton
  onClick={}
/>

Esto Si funciona:

Copiar código
<button onClick={}>
  Boton hecho componente
</button>

Recuerda, los eventos solo se asignan a los elementos JSX, a los componentes se le asignan props.

Si queremos asignar un evento a un componente, debemos pasar el evento como una props.