馃攧 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.
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias