Workshop - ReactJS
  • Conociendo React!
  • 🤷1) ¿Por qué aprender React?
  • 🤓2) Creando elementos HTML con React.createElement API
  • 💣3) Reemplazando createElement por JSX
  • 🎉4) Creando el primer componente reutilizable con React
  • 🔮5) Virtual dom
  • 👮6) Validando props
  • 📝7) Listas
  • 🤡8) Condicionando un render
  • 💅9) Dando estilo a nuestro componente
  • 🍔10) Los class component
  • 🦁11) Manipulando el dom con refs
  • 💫12) Manejo de eventos
  • 💾13) Haciendo uso del State
  • ♻️ 14) Ciclo de vida de los componentes
  • ✏️15) Creando formularios
  • 🦍16) Haciendo un HTTP request con react
  • ✈️ 17) Patrones avanzados
    • 🎉18) Componentización
  • 🛠️ 18) Tips y experiencias
  • ☎️ Contacto
Powered by GitBook
On this page
  1. ✈️ 17) Patrones avanzados

18) Componentización

Previous✈️ 17) Patrones avanzadosNext🛠️ 18) Tips y experiencias

Last updated 6 years ago

Un aspecto muy importante de React, incluso tal vez el más importante, es la premisa en la cual está basado, que es la Componentización.

El uso y reuso de componentes hace que esta librería pueda escalar de una manera sencilla, fácil de utilizar, y fomenta la reutilización, la encapsulación asi como también el testing y el mantenimiento.

Veamos un ejemplo práctico. Tenemos el siguiente componente que renderiza una lista de imágenes:

Parece sencillo no? Qué sucede si queremos cambiar la clase de cada imágen cuando image tiene una property booleana que se llama isDisabled? Y si queremos mostrar una imágen en mobile y otra en desktop?

Ya fue necesario modificar la función map y agregamos dos líneas para manejar las clases que queremos usar para cada imagen, asi como también la sección del src

Qué sucede ahora si queremos trackear cuantas veces el usuario hace click en estas imágenes?

Fue necesario agregar un onClick a este Componente, lo cual ya lo hizo crecer en tamaño debido a que fue necesario agregar un constructor también. También, si vemos como quedó el código, la función onClick quedó a nivel del componente Images. Si alguien lee nuestro código, puede pensar que este evento es al hacer click en el Componente Images, y no en cada imágen.

Y si quisieramos no solo reportar que se hizo click, sino que además en que imágen se hizo click?

Para hacer esto, tuvimos que definir una función anónima a nivel de la imagen para que devuelva la imagen seleccionada. Queda raro no? Además, por ahora solo estamos imprimiendo la imagen, pero imaginense si también fuese necesario que al hacer click en la imagen, necesitamos marcarla como visitada. Esto implicaría recorrer esa lista de imágenes, buscar la imágen que fue clickeada y actualizar la información. Y si además quisieramos mostrar estas imágenes en un slider?

De todo esto, podemos concluir que:

  • El código del componente padre se comienza a mezclar con el del hijo, y comienza a generar un poco de confusión

  • Existen 2 razones por las cuales podríamos tocar este componente, lo cual lo hace más difícil de mantener

  • El padre comienza a manejar responsabilidades del hijo

  • El testing pertinente a este componente comienza a hacerse más complejo

Como quedaría este componente entonces?

🎉