Patrón de Diseño Container-Presenter: Separación de Lógica y Presentación
Clase 7 de 31 • Curso de React Avanzado
Resumen
El patrón de diseño Container-Presenter permite organizar los componentes en una aplicación separando la lógica de negocio y la presentación visual. Este enfoque divide los componentes en dos tipos: los contenedores, que gestionan la lógica y el estado, y los presentadores, responsables únicamente de la visualización de datos sin involucrar lógica. A continuación, se explora cómo implementar este patrón para crear aplicaciones más organizadas y escalables.
¿Qué es un componente de tipo presentacional?
- Son componentes enfocados en mostrar datos recibidos a través de props, sin manejar lógica de negocio ni estado.
- Utilizan propiedades como
name
,description
eimage
para renderizar contenido. - Su estructura es simple y se basa en recibir datos preprocesados, idealmente desde un componente contenedor.
Para el ejemplo, se crea un componente DataPresenter
que muestra nombre, imagen y descripción. Los datos son pasados en forma de un objeto con ID, nombre, descripción e imagen, previamente definido como type DataItem
en TypeScript.
¿Cómo crear un componente contenedor?
- El componente contenedor (
DataContainer
) se encarga de la lógica de negocio, como realizar fetch de datos. - Define un estado local para manejar los datos (
data
) usandouseState
y controla los procesos de carga y error. - Con el hook
useEffect
, el componente realiza un fetch a un archivo JSON, y en caso de error, gestiona los mensajes correspondientes.
Para manejar el proceso, el contenedor inicializa un estado de loading
y error
, y actualiza data
cuando el fetch es exitoso. También maneja las posibles fallas del fetch a través de un bloque try-catch
.
¿Cómo se comunican el contenedor y el presentador?
- Una vez cargados, los datos del JSON son enviados al presentador mediante props.
- El contenedor usa
data.map
para iterar los elementos, generando cada ítem conID
,name
,description
, yimage
. - Al renderizar, el contenedor verifica los estados
loading
yerror
, mostrando mensajes de carga o error en caso de ser necesario.
¿Cuáles son los beneficios del patrón Container-Presenter?
- Separación de responsabilidades: Evita que la lógica de negocio interfiera con el diseño visual.
- Mantenibilidad: Simplifica la modificación de componentes al tener funciones independientes.
- Escalabilidad: Facilita la expansión del código sin afectar la estructura del proyecto.