- 1

Actualización de Herramientas de Desarrollo con React 2023
02:47 - 2

Render Props y Composición en React: Ventajas y Desventajas
16:35 - 3

Control de Props en React: Comunicación entre Componentes Padres e Hijos
09:36 - 4

Patrón Compound Components en React: Creación de un Componente de Tabs
16:48 - 5

Componentes de Orden Superior vs Hooks en React: Comparación Práctica
11:36 - 6

Uso de Custom Hooks en React para Reemplazar Higher-Order Components
08:32 - 7

Patrón de Diseño Container-Presenter: Separación de Lógica y Presentación
13:10 - 8

Componentes Controlados y No Controlados en Formularios React
10:16
Patrón de Diseño Container-Presenter: Separación de Lógica y Presentación
Clase 7 de 31 • Curso de React Avanzado
Contenido del curso
- 13

Estado Global en React: Uso de Context y Provider para Notificaciones
13:12 - 14

Creación de Notificaciones con React Context y Custom Hooks
14:30 - 15

Gestión de Estado Complejo con useReducer en React
13:51 - 16

Creación de Reducers y Mapeo de Emojis en TypeScript
11:15 - 17

"Creación de Emoji Todo List con useReducer en React"
16:43 - 18

Flujo de Comunicación en Redux: Estado Global y Acciones
10:03 - 19

Creación de Reducer para Manejo de Emojis en Lista de Tareas
09:50 - 20

Creación de un Todo List con React Redux y Reducers
18:43 - 21

Manejo de Estado Global con Sustand en Aplicaciones React
13:39 - 22

Creación de un ToDo List con Emojis usando React y Sustand
13:17 - 23

Máquinas de Estado en Desarrollo Web: Configuración y Uso Práctico
11:26 - 24

Configuración de Máquina de Estados: Crear y Gestionar Vistas y Pasos
09:04 - 25

Creación de un Componente Wizard con Estados Locales en React
16:58 - 26

Visualización de Máquinas de Estado con XState
03:45
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,descriptioneimagepara 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) usandouseStatey 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.mappara iterar los elementos, generando cada ítem conID,name,description, yimage. - Al renderizar, el contenedor verifica los estados
loadingyerror, 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.