Introducci贸n a React y Preparaci贸n del Entorno

1

Aprende React: Desarrollo Web y Mobile Eficiente y Escalable

Fundamentos de Componentes y JSX

2

Creaci贸n de Componentes con JavaScript y React

3

Creaci贸n de Componentes Reutilizables con Props en React

Quiz: Fundamentos de Componentes y JSX

Manejo del Estado y Hooks B谩sicos

4

Estado Local en React: Uso de useState para Contadores

5

Creaci贸n y manejo de estados en un Toggle Button con React

6

Eventos y manejo de estado en React: name form interactivo

7

Uso de useEffect para Manejar Efectos Secundarios en React

Quiz: Manejo del Estado y Hooks B谩sicos

Estilizaci贸n de Componentes

8

Estilos en React: CSS, SaaS y M贸dulos CSS

9

Estilos en L铆nea en React: Uso y Mejores Pr谩cticas

10

Creaci贸n de Botones Reactivos con Styled Components en React

11

Instalaci贸n y Uso de Tailwind CSS en Proyectos Web

Quiz: Estilizaci贸n de Componentes

Trabajo con Datos y APIs

12

Creaci贸n de Componentes con Datos Est谩ticos en React

13

Creaci贸n de un Componente User List con Fetch en React

14

Manejo de Errores y Carga en Fetch para Componentes React

15

Optimizaci贸n de Fetch con useEffect y Dependencias en React

Quiz: Trabajo con Datos y APIs

Componentes Avanzados y Estado Global

16

Manejo de estados complejos en React con useReducer

17

Context API en React: Manejo de Estados Globales y Proveedores

18

Creaci贸n de Hooks Personalizados en React para Contadores Reutilizables

19

Optimizaci贸n de Componentes en React con React.memo y Hooks

Quiz: Componentes Avanzados y Estado Global

Introducci贸n a TypeScript en React

20

Componentes con TypeScript en React: Tipado de Props y Funciones

21

Tipado de Estados y Funciones en TypeScript para React

22

Tipado de useReducer y Context API en TypeScript

Quiz: Introducci贸n a TypeScript en React

Nuevas Caracter铆sticas de React 19

23

Novedades y Mejoras en React 19 para Desarrolladores

24

Fundamentos y Actualizaci贸n Continua en React

No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Curso de React.js

Curso de React.js

Estefany Aguilar

Estefany Aguilar

Manejo de estados complejos en React con useReducer

16/24
Recursos

El hook useReducer es una herramienta poderosa en React que permite manejar estados complejos de manera m谩s organizada y escalable. A diferencia de useState, que es ideal para estados simples, useReducer brinda una estructura m谩s robusta para gestionar m煤ltiples acciones y transiciones de estado. En este art铆culo, exploraremos c贸mo implementar useReducer en un componente de contador, entendiendo su funcionamiento y aplicaciones pr谩cticas.

驴Qu茅 es useReducer y cu谩ndo utilizarlo?

UseReducer es un hook de React dise帽ado para manejar estados complejos que requieren m煤ltiples acciones o transformaciones. Es especialmente 煤til cuando la l贸gica de actualizaci贸n del estado involucra varias operaciones o cuando el pr贸ximo estado depende del anterior.

A diferencia de useState, que simplemente reemplaza el estado anterior, useReducer permite definir una funci贸n reductora (reducer) que especifica c贸mo el estado debe cambiar en respuesta a diferentes acciones. Esta estructura se asemeja al patr贸n de dise帽o Redux, pero integrado directamente en React.

Deber铆as considerar usar useReducer cuando:

  • El estado tiene una estructura compleja (objetos anidados o arrays)
  • Las actualizaciones de estado dependen del valor anterior
  • Necesitas manejar m煤ltiples acciones relacionadas
  • La l贸gica de actualizaci贸n es compleja o extensa

Estructura b谩sica de useReducer

La sintaxis b谩sica de useReducer incluye:

const [state, dispatch] = useReducer(reducer, initialState);

Donde:

  • state: El estado actual
  • dispatch: Funci贸n para enviar acciones al reducer
  • reducer: Funci贸n que determina c贸mo actualizar el estado basado en la acci贸n
  • initialState: Valor inicial del estado

驴C贸mo implementar un contador con useReducer?

Vamos a crear un componente de contador que permita incrementar y decrementar un valor utilizando useReducer. Este ejemplo ilustra perfectamente c贸mo manejar m煤ltiples acciones sobre un mismo estado.

Creando la funci贸n reductora

El primer paso es definir nuestra funci贸n reductora (reducer), que determinar谩 c贸mo cambia el estado seg煤n la acci贸n recibida:

const reducer = (state, action) => {
  switch (action.type) {
    case 'increment':
      return { count: state.count + 1 };
    case 'decrement':
      return { count: state.count - 1 };
    default:
      return state;
  }
};

Esta funci贸n recibe dos par谩metros:

  • state: El estado actual
  • action: Un objeto que describe qu茅 cambio realizar

El patr贸n com煤n es utilizar un switch-case para manejar diferentes tipos de acciones. Cada caso retorna un nuevo objeto de estado, manteniendo la inmutabilidad que React espera.

Implementando el componente completo

Ahora, implementemos el componente Counter completo:

import { useReducer } from 'react';

const Counter = () => {
  const reducer = (state, action) => {
    switch (action.type) {
      case 'increment':
        return { count: state.count + 1 };
      case 'decrement':
        return { count: state.count - 1 };
      default:
        return state;
    }
  };

  const [state, dispatch] = useReducer(reducer, { count: 0 });

  return (
    <div>
      Contador: {state.count}
      <button onClick={() => dispatch({ type: 'increment' })}>
        Increment
      </button>
      <button onClick={() => dispatch({ type: 'decrement' })}>
        Decrement
      </button>
    </div>
  );
};

export default Counter;

En este componente:

  1. Importamos useReducer de React
  2. Definimos nuestra funci贸n reductora
  3. Inicializamos el estado con useReducer, estableciendo un valor inicial de { count: 0 }
  4. Renderizamos el valor actual del contador y dos botones
  5. Cada bot贸n dispara una acci贸n diferente mediante la funci贸n dispatch

Entendiendo el flujo de datos

Cuando un usuario hace clic en un bot贸n, ocurre lo siguiente:

  1. Se llama a dispatch con un objeto de acci贸n (por ejemplo, { type: 'increment' })
  2. React pasa esta acci贸n a la funci贸n reductora junto con el estado actual
  3. El reducer determina el nuevo estado basado en el tipo de acci贸n
  4. React actualiza el estado y vuelve a renderizar el componente

Este flujo unidireccional hace que el c贸digo sea m谩s predecible y f谩cil de depurar, especialmente cuando la l贸gica de estado se vuelve compleja.

驴Qu茅 ventajas ofrece useReducer sobre useState?

UseReducer proporciona varias ventajas sobre useState para estados complejos:

  • Centralizaci贸n de la l贸gica: Toda la l贸gica de actualizaci贸n del estado se encuentra en un solo lugar (la funci贸n reductora)
  • Mejor manejo de estados relacionados: Ideal para cuando m煤ltiples valores de estado est谩n relacionados
  • Facilita el testing: La funci贸n reductora es pura y puede probarse de forma aislada
  • Mejora la legibilidad: Las acciones tienen nombres descriptivos que indican su intenci贸n
  • Facilita la depuraci贸n: El flujo de datos es m谩s predecible y rastreable

UseReducer es particularmente 煤til en aplicaciones m谩s grandes donde la gesti贸n de estado puede volverse complicada r谩pidamente.

El uso de useReducer en React proporciona una estructura m谩s organizada para manejar estados complejos, permitiendo un c贸digo m谩s mantenible y escalable. A trav茅s del ejemplo del contador, hemos visto c贸mo implementar este patr贸n para gestionar m煤ltiples acciones sobre un mismo estado. La clave est谩 en definir claramente las acciones posibles y c贸mo cada una transforma el estado actual. 驴Qu茅 otros casos de uso se te ocurren para implementar useReducer en tus proyectos? Comparte tus ideas en los comentarios.

Aportes 7

Preguntas 0

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

Para casos mucho m谩s complejos en manejo de estados, es recomendable aprender sobre Redux, RxJS y otras opciones.
Gu铆a que sin dudas les ayudara much铆simo a entender desde cero el hook `useReducer`, en React paso a paso. 馃殌 <https://www.urianviera.com/reactjs/guia-para-dominar-el-hook-usereducer>
Al utilizar el hook `useReducer`, el segundo argumento que se debe pasar es el estado inicial. En el contexto del contador, debes proporcionar un objeto que contenga la propiedad `count`, por ejemplo: ```javascript const initialState = { count: 0 }; const [state, dispatch] = useReducer(reducer, initialState); ``` Esto establece el valor inicial del contador en cero.
Se entiende el concepto, pero creo que durante todas este curso deber铆an ense帽ar como organizar bien nuestro c贸digo y sobre todo el principio de separaci贸n de responsabilidades. Estamos usando super malas practicas
`useReducer` es como tener un administrador que se encarga de recordar y actualizar la informaci贸n importante en tu aplicaci贸n, asegur谩ndose de que todo est茅 organizado y funcione correctamente. Es especialmente 煤til cuando tienes mucha informaci贸n que puede cambiar de muchas maneras diferentes
![](https://static.platzi.com/media/user_upload/image-d1ea7d54-4597-4599-8262-c3725f5cf7a2.jpg)
Esta es una excelente introducci贸n a Redux y manejo de estados con stores. Buen铆sima