馃攧 useReducer: manejo avanzado de estados en React

useReducer en React - manejo avanzado de estados

馃攧 useReducer en React: manejo avanzado de estados

El Hook useReducer es una alternativa avanzada a useState para manejar estados m谩s complejos. Es especialmente 煤til cuando la l贸gica de actualizaci贸n del estado involucra m煤ltiples subvalores o acciones.


1️⃣ ¿Qu茅 es useReducer?

Este Hook sigue el mismo patr贸n que los reducers en Redux: se basa en una funci贸n reductora que recibe el estado actual y una acci贸n, y devuelve el nuevo estado.

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

Donde:

  • ⚙️ reducer → funci贸n que define c贸mo cambia el estado.
  • 馃З estadoInicial → valor inicial del estado.
  • 馃殌 dispatch → funci贸n que se usa para enviar acciones al reducer.

2️⃣ Ejemplo b谩sico de contador con useReducer

import { useReducer } from "react";

const initialState = { contador: 0 };

function reducer(state, action) {
  switch (action.type) {
    case "incrementar":
      return { contador: state.contador + 1 };
    case "decrementar":
      return { contador: state.contador - 1 };
    case "reset":
      return { contador: 0 };
    default:
      return state;
  }
}

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

  return (
    <div>
      <h2>Contador: {state.contador}</h2>
      <button onClick={() => dispatch({ type: "incrementar" })}>+</button>
      <button onClick={() => dispatch({ type: "decrementar" })}>-</button>
      <button onClick={() => dispatch({ type: "reset" })}>Reset</button>
    </div>
  );
}

export default ContadorReducer;
  

Ejemplo visual de contador con useReducer

Contador: 0


3️⃣ Cu谩ndo usar useReducer en lugar de useState

  • 馃З Cuando el estado tiene m煤ltiples subvalores relacionados.
  • ⚙️ Cuando las actualizaciones de estado siguen una l贸gica compleja.
  • 馃摝 Cuando quieres separar la l贸gica del estado del componente.
馃挕 Consejo: usa useReducer si tu componente empieza a tener varios useState o m煤ltiples funciones de actualizaci贸n.

4️⃣ Ejemplo avanzado: manejar formulario con useReducer

En este ejemplo, gestionamos el estado de un formulario de usuario con varias propiedades.

import { useReducer } from "react";

const initialForm = { nombre: "", email: "" };

function formReducer(state, action) {
  switch (action.type) {
    case "cambiar_campo":
      return { ...state, [action.campo]: action.valor };
    case "reset":
      return initialForm;
    default:
      return state;
  }
}

function FormularioReducer() {
  const [form, dispatch] = useReducer(formReducer, initialForm);

  const manejarCambio = (e) => {
    dispatch({
      type: "cambiar_campo",
      campo: e.target.name,
      valor: e.target.value
    });
  };

  return (
    <form>
      <input
        name="nombre"
        value={form.nombre}
        onChange={manejarCambio}
        placeholder="Nombre"
      />
      <input
        name="email"
        value={form.email}
        onChange={manejarCambio}
        placeholder="Email"
      />
      <button type="button" onClick={() => dispatch({ type: "reset" })}>
        Reset
      </button>
    </form>
  );
}

export default FormularioReducer;
  

Ejemplo visual: formulario con useReducer


5️⃣ Resumen

  • 馃攣 useReducer es ideal para estados complejos.
  • 馃 Separa la l贸gica de actualizaci贸n del componente.
  • ⚡ Facilita el mantenimiento en proyectos grandes.

En resumen, useReducer es una poderosa herramienta cuando los estados y sus transiciones comienzan a crecer en complejidad. Ayuda a mantener el c贸digo organizado, predecible y m谩s f谩cil de depurar.

Publicar un comentario

0 Comentarios