useContext
useContext
El hook useContext en React se utiliza para acceder al contexto proporcionado por el componente Context.Provider más cercano en la jerarquía de componentes. Permite a los componentes consumir valores de contexto sin necesidad de pasar props manualmente a través de cada nivel del árbol de componentes.
- 
Importación: Primero, necesitas importar el hook desde React.
import React, { useContext } from 'react' - 
Sintaxis básica:
const value = useContext(MyContext)MyContext: El objeto de contexto creado conReact.createContext.value: El valor actual del contexto proporcionado por el contexto más cercano en la jerarquía de componentes.
 
Creación de un Contexto
Primero, creemos un contexto que proporcionará un tema para la aplicación.
import React, { createContext, useState } from 'react'
// Creamos un contexto con un valor inicialconst ThemeContext = createContext('light')
// Componente proveedor que envuelve la aplicaciónfunction ThemeProvider({ children }) {    const [theme, setTheme] = useState('light')
    const toggleTheme = () => {        setTheme((prevTheme) => (prevTheme === 'light' ? 'dark' : 'light'))    }
    return <ThemeContext.Provider value={{ theme, toggleTheme }}>{children}</ThemeContext.Provider>}
export { ThemeProvider, ThemeContext }Uso de useContext
Ahora podemos consumir el contexto ThemeContext en cualquier componente hijo dentro del árbol del ThemeProvider.
import React, { useContext } from 'react'import { ThemeContext } from './ThemeProvider'
function ThemeToggler() {    const { theme, toggleTheme } = useContext(ThemeContext)
    return <button onClick={toggleTheme}>Switch to {theme === 'light' ? 'dark' : 'light'} mode</button>}
export default ThemeTogglerDesglose del Ejemplo
- 
Creación del Contexto:
const ThemeContext = createContext('light')Creamos un contexto con un valor inicial de
'light'. - 
Proveedor de Contexto:
<ThemeContext.Provider value={{ theme, toggleTheme }}>{children}</ThemeContext.Provider>ThemeProviderenvuelve la aplicación y proporciona el contextoThemeContexta todos los componentes descendientes. - 
Consumo de Contexto con
useContext:const { theme, toggleTheme } = useContext(ThemeContext)useContextse utiliza enThemeTogglerpara acceder al valor del contextoThemeContexty a la funcióntoggleThemeproporcionada porThemeProvider. - 
Uso del Contexto en Componente Hijo:
<button onClick={toggleTheme}>Switch to {theme === 'light' ? 'dark' : 'light'} mode</button>El botón cambia el tema entre “light” y “dark” usando la función
toggleThemedel contexto. 
Uso Avanzado
useContext es útil para compartir datos que son necesarios en varios componentes sin tener que pasar props manualmente a través de cada nivel del árbol de componentes. También puede ser usado para manejar estados globales o temas como en el ejemplo anterior.
Ejemplo con Autenticación
Imaginemos que tenemos un contexto para manejar la autenticación de usuario.
Creación del Contexto
import React, { createContext, useState } from 'react'
const AuthContext = createContext()
function AuthProvider({ children }) {    const [user, setUser] = useState(null)
    const login = (username, password) => {        // Lógica de autenticación aquí...        setUser({ username })    }
    const logout = () => {        setUser(null)    }
    return <AuthContext.Provider value={{ user, login, logout }}>{children}</AuthContext.Provider>}
export { AuthProvider, AuthContext }Consumo del Contexto
import React, { useContext, useState } from 'react'import { AuthContext } from './AuthProvider'
function Login() {    const { login } = useContext(AuthContext)    const [username, setUsername] = useState('')    const [password, setPassword] = useState('')
    const handleLogin = () => {        login(username, password)    }
    return (        <div>            <input type="text" value={username} onChange={(e) => setUsername(e.target.value)} placeholder="Username" />            <input                type="password"                value={password}                onChange={(e) => setPassword(e.target.value)}                placeholder="Password"            />            <button onClick={handleLogin}>Login</button>        </div>    )}
export default LoginDesglose del Ejemplo de Autenticación
- 
Creación del Contexto de Autenticación:
const AuthContext = createContext()Creamos un contexto para manejar la autenticación de usuario.
 - 
Proveedor de Contexto de Autenticación:
<AuthContext.Provider value={{ user, login, logout }}>{children}</AuthContext.Provider>AuthProviderenvuelve la aplicación y proporciona el contextoAuthContexta todos los componentes descendientes. - 
Consumo de Contexto con
useContext:const { login } = useContext(AuthContext)useContextse utiliza enLoginpara acceder a la funciónloginproporcionada porAuthProvider. - 
Uso del Contexto en el Componente Hijo:
<button onClick={handleLogin}>Login</button>El botón llama a
handleLogin, que a su vez llama a la funciónlogindel contexto para autenticar al usuario con el nombre de usuario y contraseña ingresados.