14 - 馃З Manejo de estado global (Context API / Zustand)
Aprende a compartir datos y funciones entre diferentes componentes de tu aplicaci贸n Next.js utilizando Context API (nativa de React) y Zustand (una alternativa ligera y moderna).
馃 ¿Qu茅 es el estado global?
En React, cada componente puede tener su propio estado local mediante useState.
Sin embargo, a medida que la aplicaci贸n crece, muchos componentes necesitan compartir informaci贸n com煤n:
el usuario actual, el tema (oscuro/claro), o los items del carrito de compras.
Para esto usamos un estado global: un almac茅n centralizado de datos accesible desde cualquier parte de la app.
⚙️ Context API — La soluci贸n nativa de React
La Context API permite crear un “contexto” que envuelve a tus componentes y les proporciona datos sin tener que pasar props manualmente en cada nivel.
馃摝 Ejemplo: contador global
// context/ContadorContext.js
"use client";
import { createContext, useContext, useState } from "react";
const ContadorContext = createContext();
export function ContadorProvider({ children }) {
const [contador, setContador] = useState(0);
const incrementar = () => setContador(contador + 1);
const decrementar = () => setContador(contador - 1);
return (
<ContadorContext.Provider value={{ contador, incrementar, decrementar }}>
{children}
</ContadorContext.Provider>
);
}
export const useContador = () => useContext(ContadorContext);
Y luego lo usamos en dos componentes diferentes:
// app/page.js
"use client";
import { ContadorProvider } from "@/context/ContadorContext";
import ContadorDisplay from "@/components/ContadorDisplay";
import ContadorBotones from "@/components/ContadorBotones";
export default function Home() {
return (
<ContadorProvider>
<main className="p-6 text-center">
<h1 className="text-2xl font-bold mb-3">馃М Contador Global con Context</h1>
<ContadorDisplay />
<ContadorBotones />
</main>
</ContadorProvider>
);
}
// components/ContadorDisplay.js
"use client";
import { useContador } from "@/context/ContadorContext";
export default function ContadorDisplay() {
const { contador } = useContador();
return <h2 className="text-3xl font-bold mb-2">{contador}</h2>;
}
// components/ContadorBotones.js
"use client";
import { useContador } from "@/context/ContadorContext";
export default function ContadorBotones() {
const { incrementar, decrementar } = useContador();
return (
<div className="flex justify-center gap-3">
<button onClick={decrementar} className="bg-red-500 text-white px-3 py-1 rounded">−</button>
<button onClick={incrementar} className="bg-green-500 text-white px-3 py-1 rounded">+</button>
</div>
);
}
馃З Resultado visual:
馃М Contador Global con Context
3
⚡ Zustand — Estado global simple y r谩pido
Zustand es una librer铆a ligera (creada por los mismos autores de Jotai y React Three Fiber) que permite manejar el estado global de forma m谩s eficiente y sin tanto boilerplate.
Instalaci贸n:
npm install zustand
馃摝 Ejemplo: contador global con Zustand
// store/useContadorStore.js
"use client";
import { create } from "zustand";
export const useContadorStore = create((set) => ({
contador: 0,
incrementar: () => set((state) => ({ contador: state.contador + 1 })),
decrementar: () => set((state) => ({ contador: state.contador - 1 })),
}));
Y luego lo usamos directamente sin Providers:
// app/zustand/page.js
"use client";
import { useContadorStore } from "@/store/useContadorStore";
export default function ZustandPage() {
const { contador, incrementar, decrementar } = useContadorStore();
return (
<main className="text-center p-6">
<h1 className="text-2xl font-bold mb-3">⚡ Contador con Zustand</h1>
<h2 className="text-3xl mb-3">{contador}</h2>
<button onClick={decrementar} className="bg-red-500 text-white px-3 py-1 rounded me-2">−</button>
<button onClick={incrementar} className="bg-green-500 text-white px-3 py-1 rounded">+</button>
</main>
);
}
馃搳 Comparaci贸n r谩pida
| Caracter铆stica | Context API | Zustand |
|---|---|---|
| Instalaci贸n | ✅ Nativa | ⚙️ Requiere librer铆a |
| Reactividad | Media (re-render general) | Alta (renderiza solo lo necesario) |
| Sintaxis | M谩s verbosa | Muy concisa |
| Ideal para | Temas, usuario, idioma | Estados complejos, apps grandes |
✅ Resumen
- 馃 Context API es la opci贸n nativa para estados simples.
- ⚡ Zustand ofrece un enfoque moderno, eficiente y f谩cil de escalar.
- 馃摝 Ambas pueden convivir en la misma app seg煤n el caso de uso.
- 馃殌 Entender el estado global es clave para construir apps din谩micas y reactivas en Next.js.
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias