Context API en react


Context API: Crear contextos, Proveedor y consumidor, Reemplazo del props drilling

oscar Escrito por oscar 27 April 2025 69 0

Vamos a meternos de lleno en Context API, explicado de forma experta pero clarísima. 🚀

¿Qué es Context API en React?

Context API es una herramienta nativa de React que permite compartir datos entre componentes sin necesidad de pasar props manualmente por cada nivel (es decir, evita el props drilling).

¿Qué soluciona?

Cuando tienes muchos componentes anidados y quieres que varios de ellos accedan a la misma información, el Context te permite:

  • Crear un “almacén” de datos.
  • Proveer esos datos a toda una sección del árbol de componentes.
  • Consumir esos datos desde cualquier componente hijo, sin importar la profundidad.

¿Cómo funciona Context API?

Se basa en tres pasos:

Paso Explicación
1. Crear un Contexto Definir el "espacio de datos" que vas a compartir.
2. Proveedor (Provider) Especificar qué datos quieres ofrecer al árbol de componentes.
3. Consumidor (Consumer) Acceder a esos datos desde cualquier componente hijo.

Ejemplo completo: 🔥

Vamos a hacer un contexto de usuario.

1. Crear el contexto

import { createContext } from "react"; export const UserContext = createContext();

createContext() crea un objeto con dos cosas importantes: Provider y Consumer.

2. Crear el proveedor (Provider)

import { useState } from "react";
import { UserContext } from "./UserContext";
export function UserProvider({ children }) {
  const [user, setUser] = useState({ name: "Juan", age: 25 });
  return (
    <UserContext.Provider value={{ user, setUser }}>
      {" "}
      {children}{" "}
    </UserContext.Provider>
  );
}

UserProvider envuelve a tus componentes y les da acceso a user y setUser.

3. Consumir el contexto en cualquier parte del árbol

import { useContext } from "react";
import { UserContext } from "./UserContext";
function Perfil() {
  const { user } = useContext(UserContext);
  return (
    <div>
      {" "}
      <h2>Nombre: {user.name}</h2> <h3>Edad: {user.age}</h3>{" "}
    </div>
  );
}

useContext(UserContext) permite leer directamente el valor del contexto.

Y tu árbol de componentes quedaría así:

import { UserProvider } from "./UserProvider";
import Perfil from "./Perfil";
function App() {
  return (
    <UserProvider>
      {" "}
      <Perfil />{" "}
      {/* Otros componentes que también pueden acceder a UserContext */}{" "}
    </UserProvider>
  );
}

¿Cómo Context API reemplaza Props Drilling?

Sin Context:

  • AppParentChildGrandChild
  • Todos tienen que recibir user como props, aunque sólo GrandChild lo usa.

Con Context:

  • App provee el user en un Provider.
  • GrandChild accede directamente a user sin que Parent y Child tengan que saber nada.

➡️ Mucho más limpio, mantenible y escalable.

Tips de Experto 🧠

  • Cada Context debería ser específico (no metas todo en uno solo como una "bolsa mágica").

  • Si tu estado cambia frecuentemente, Context puede causar muchos re-renderizados. En esos casos, considera optimizarlo o usar soluciones como Redux, Zustand, etc.

  • Context es perfecto para temas, usuarios, idioma actual, preferencias, autenticación, etc.

Resumen en un vistazo:

Concepto ¿Qué hace?
createContext Crea el contexto.
Provider Ofrece valores a los hijos.
useContext o Consumer Accede a esos valores en cualquier componente hijo.
Resultado Se elimina el props drilling. Todo es más limpio y directo.

Comentario

Debe aceptar antes de enviar