馃寪 useContext: compartir datos globales en React sin props
El Hook useContext permite compartir informaci贸n entre componentes de React sin tener que pasar props manualmente por cada nivel del 谩rbol.
Es la soluci贸n ideal cuando varios componentes necesitan acceder al mismo dato, como el tema visual, la sesi贸n del usuario o el idioma.
1️⃣ ¿Por qu茅 usar useContext?
Sin useContext, los datos deben pasarse de padre a hijo a trav茅s de props, lo que genera el llamado “prop drilling” (pasar props por muchos niveles).
Con useContext se evita este problema creando un contexto global accesible desde cualquier parte de la aplicaci贸n.
2️⃣ Crear un contexto
Primero se crea un contexto con React.createContext() y luego se provee su valor con un Provider.
import React, { createContext, useState } from "react";
// 1️⃣ Crear el contexto
export const TemaContext = createContext();
// 2️⃣ Crear un proveedor
export function TemaProvider({ children }) {
const [tema, setTema] = useState("claro");
const alternarTema = () => {
setTema(tema === "claro" ? "oscuro" : "claro");
};
return (
<TemaContext.Provider value={{ tema, alternarTema }}>
{children}
</TemaContext.Provider>
);
}
3️⃣ Consumir el contexto con useContext
Cualquier componente dentro del TemaProvider puede acceder al contexto sin recibir props:
import React, { useContext } from "react";
import { TemaContext } from "./TemaContext";
function BotonTema() {
const { tema, alternarTema } = useContext(TemaContext);
return (
<button
onClick={alternarTema}
style={{
backgroundColor: tema === "claro" ? "#f4f4f4" : "#333",
color: tema === "claro" ? "#333" : "#f4f4f4",
border: "none",
padding: "10px 20px",
borderRadius: "5px",
cursor: "pointer",
}}
>
Cambiar a tema {tema === "claro" ? "oscuro" : "claro"}
</button>
);
}
export default BotonTema;
Ejemplo visual de cambio de tema
4️⃣ Estructura completa de uso
import React from "react";
import { TemaProvider } from "./TemaContext";
import BotonTema from "./BotonTema";
function App() {
return (
<TemaProvider>
<div>
<h1>Aplicaci贸n con contexto</h1>
<BotonTema />
</div>
</TemaProvider>
);
}
export default App;
5️⃣ Ejemplo visual del 谩rbol de componentes
Todos los componentes dentro de TemaProvider pueden acceder al contexto sin necesidad de recibir props.
Es especialmente 煤til cuando tu aplicaci贸n crece y necesitas compartir estados globales como usuario, autenticaci贸n o idioma.
6️⃣ Buenas pr谩cticas
- ✅ Define un contexto por responsabilidad (tema, usuario, configuraci贸n, etc.).
- ✅ Mant茅n los valores del contexto simples (evita pasar funciones o objetos innecesarios).
- ⚙️ Encapsula tu l贸gica de contexto en un archivo separado.
- 馃殌 Usa
useReducero librer铆as como Zustand para contextos m谩s complejos.
7️⃣ Resumen
useContext simplifica el intercambio de datos globales sin props. Es una herramienta poderosa para mantener tu c贸digo limpio, modular y sin cadenas de props innecesarias.
- 馃實 Evita el prop drilling.
- 馃Л Facilita la comunicaci贸n entre componentes.
- 馃攧 Puede combinarse con
useReducerouseStatepara manejar estados globales.
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias