1 of 52

RECUERDA PONER A GRABAR LA CLASE

2 of 52

¿DUDAS DEL ON-BOARDING?

3 of 52

EVENTOS

Clase 09. REACT JS

4 of 52

  • Entender el sistema de eventos de react y su implementación.
  • Diseñar componentes orientados a eventos.

OBJETIVOS DE LA CLASE

5 of 52

NavLink: es un link con un estilo, está siempre detectando la ruta actual, y si coincide con la suya nos activa la clase que le demos para que el user sepa qué ítem de la lista corresponde con la vista actual.

useParams: lo podemos utilizar para leer en js los parámetros de la ruta. En combinación con un useEffect, nos sirve para obtener actualizaciones sobre los parámetros.

GLOSARIO:

Clase 8

6 of 52

MAPA DE CONCEPTOS

7 of 52

MAPA DE CONCEPTOS CLASE 9

Eventos

Componentes basados en eventos

¿Qué son?

Tipos

DOM Event

Event listener

React y los eventos

8 of 52

Clase 9

Eventos

Clase 8

Routing y Navegación

Clase 10

Context

CRONOGRAMA DEL CURSO

EJEMPLOS EN VIVO

EJEMPLOS EN VIVO

EJEMPLOS EN VIVO

AGREGAR UN ROUTER A TU APP

CREA UNA MÁSCARA DE INPUT

SINCRONIZAR COUNTER

CREA TU CONTEXTO

CARTCONTEXT

PRIMERA ENTREGA DEL PROYECTO FINAL

9 of 52

EVENTOS

10 of 52

Si bien existen muy variados tipos de aplicaciones, es raro encontrar alguna que pueda tener sentido sin eventos.

11 of 52

¿QUÉ ES UN EVENTO EN NUESTRO CONTEXTO?

Es un estímulo programático, que puede ser provocado de manera automática, o ser el resultado de una interacción del usuario con la UI

12 of 52

TIPOS DE EVENTOS

13 of 52

Si estamos viendo Netflix por mucho tiempo sin tocar el control remoto, ocurre un evento automático por inactividad que nos pregunta...

EVENTOS AUTOMÁTICOS

14 of 52

Son todas las interacciones del usuario que producen algún tipo de respuesta o efecto secundario

EVENTOS MANUALES

15 of 52

DOM EVENTS

16 of 52

El DOM tiene una serie de eventos estándar, y se dividen en varias categorías:

  • Dispositivo/acción: mouse, input, keyboard, wheel, focus, etcétera.

  • Custom events: es posible definir eventos propios que disparen la información que queramos.

17 of 52

El evento de UI más conocido es el click.

18 of 52

Aunque probablemente lo utilices casi tanto como el scroll vía un wheel event

19 of 52

EVENT LISTENER

20 of 52

EVENT LISTENER

Un Event Listener es un patrón de diseño que sirve, como su nombre lo indica, para escuchar cuando un algo ocurre en algún elemento, librería o API, y poder realizar una acción en consecuencia.

Tip: ¡hay otros lenguajes que también implementan eventos!

21 of 52

CONFIGURANDO

EVENT LISTENERS

22 of 52

AGREGANDO UN EVENT LISTENER

Nombre de evento que quiero escuchar

Referencia de la función a registrar

Nota: ¡guardar referencia para poder removerlo después!

23 of 52

REMOVIENDO UN EVENT LISTENER

Nota: invocar el removeEventListener en la función de limpieza de nuestros hooks en donde los hayamos registrado.

24 of 52

  • Se des-registran con el nombre y la referencia a la función con que los registramos (no alcanza únicamente el nombre).
  • Si registras manualmente un evento del DOM en tu componente de react hazlo dentro de un effect y asegúrate de de-registrarlo en la función de limpieza en el return del efecto.
  • Recordemos: Si dejamos event listeners sin des-registrar corremos riesgos de crear leaks de memoria o registrar un evento más de una vez ( se ejecutara una vez por cada register ).

REMOVIENDO EVENTOS

25 of 52

REACT Y LOS EVENTOS

26 of 52

Los distintos browsers suelen tener algunas variaciones en el contenido de los eventos.

Esto haría difícil utilizarlos de manera uniforme en cada plataforma. React es consciente de esto, y nos ayuda proveyendo esta abstracción.

SYNTHETIC EVENTS

27 of 52

  • Sirven para normalizar/estandarizar eventos entre browsers.
  • Siempre que registre un evento vía React/Jsx con onClick, no obtendré el evento nativo, sino uno sintético.
  • Se destruyen al terminar la ejecución de la función vinculada (por performance).
  • Puedo acceder al evento nativo via evt.nativeEvent

SYNTHETIC EVENTS

28 of 52

VAMOS AL CÓDIGO

29 of 52

DECLARANDO UN EVENTO

30 of 52

DECLARANDO UN EVENTO

Si necesito almacenar el valor del evento puedo guardarlo en un estado.

31 of 52

Algunos eventos como onKeyDown son cancelables, por ejemplo:

evt.preventDefault()

CANCELANDO EL COMPORTAMIENTO DEFAULT

32 of 52

Los eventos por default se ejecutan en el elemento, y en cada uno de sus ancestros. Si esto puede traer algún efecto secundario podemos cancelar la propagación (bubbling):

evt.stopPropagation()

EVITANDO LA PROPAGACIÓN

33 of 52

VAMOS AL CÓDIGO

34 of 52

CREA UNA MÁSCARA DE INPUT

Crea un input de texto que no permita el ingreso de vocales.

35 of 52

¡A PRACTICAR!

En stackblitz crea un input de texto que no permita el ingreso de vocales, cancelando su evento onKeyDown en los keys adecuados.

Pista: el synthetic event de keydown tiene varias propiedades, encuentra cuál te puede dar la información de la tecla ;)

Cuentas con 15 minutos para realizar la actividad.

36 of 52

BREAK

¡5/10 MINUTOS Y VOLVEMOS!

37 of 52

COMPONENTES BASADOS EN EVENTOS

38 of 52

UNIDIRECTIONAL SYMMETRY

Ilustradora: Maggie Appleton @ Woman of React 2020

Bajan los datos

Suben los eventos

Acción

Reacción

39 of 52

INTERCAMBIABILIDAD/

AGNOSTIC BEHAVIOR

40 of 52

INTERCAMBIABILIDAD

Implementando componentes de manera eficiente, podremos generar intercambiabilidad, e intercambiar funcionalidades sin mucho esfuerzo.

41 of 52

INTERCAMBIABILIDAD

Podemos generar variaciones del mismo componente, con distinto layout y el mismo comportamiento.

42 of 52

ABSTRACCIÓN: CASO 1

Sirve como estrategia

para ocultar el comportamiento interno de rendering e implementación de change events

43 of 52

El consumer sigue sin cambiar la firma de consumo:

  • onSelect
  • defaultOption

ABSTRACCIÓN: CASO 2

44 of 52

  • Permite mover la lógica compleja a componentes de menor orden.
  • Si ambos se comportan igual, el parent no lo sabrá aunque sus implementaciones sean distintas.
  • Permite que el parent se encargue del resultado final sin darle esa responsabilidad a sus children.

ORIENTACIÓN A EVENTOS

45 of 52

VAMOS AL CÓDIGO

46 of 52

Importa el ItemCount.js del desafío Nº 4 en el counter ItemDetail.js, y configura el evento de compra, siguiendo los detalles de manual.

SINCRONIZAR COUNTER

7

47 of 52

SINCRONIZAR COUNTER

Formato: link al último commit de tu repositorio en Github

>> Consigna:

Importa el ItemCount.js del desafío Nº 4 en el counter ItemDetail.js, y configura el evento de compra, siguiendo los detalles de manual.

>>Aspectos a incluir en el entregable:

  • Debes lograr separar la responsabilidad del count, del detalle del ítem, y esperar los eventos de agregado emitidos por el ItemCount
    • Cuando ItemCount emita un evento onAdd almacenarás ese valor en un estado interno del ItemDetail para hacer desaparecer el ItemCount
    • El botón de terminar mi compra debe poder navegar a un componente vacío por el momento en la ruta ‘/cart’.

48 of 52

SINCRONIZAR COUNTER

Formato: link al último commit de tu repositorio en Github

>> Ejemplo inicial:

function ItemDetail({ item }) {

onAdd(quantityToAdd) {

// Hemos recibido un evento del ItemCount

}

return <>

<ItemCount > // Configura las props de ItemCount. Qué habría que mandarle?👀

</>;

}

49 of 52

SINCRONIZAR COUNTER

Ejemplo:

50 of 52

¿PREGUNTAS?

51 of 52

Resumen de lo visto en clase hoy:

  • DOM & Synthetic Events.
  • Diseño de eventos en componentes.

¡MUCHAS GRACIAS!

52 of 52

OPINA Y VALORA ESTA CLASE