React Hook - useContext
O useContext
é um React Hook que proporciona uma forma eficiente e simples de consumir o contexto em componentes React. O contexto é uma funcionalidade do React que permite compartilhar valores (como estados ou funções) entre componentes sem a necessidade de passar explicitamente props de componente para componente, passando os dados através da árvore de componentes.
Sintaxe
A sintaxe básica do useContext
envolve a criação de um objeto de contexto usando a função React.createContext()
e, em seguida, a utilização do useContext
dentro de um componente funcional para acessar os valores fornecidos pelo provedor do contexto.
import React, { createContext, useContext } from 'react';
const MeuContexto = createContext();
const ProvedorDoContexto = ({ children }) => {
// Valor a ser fornecido pelo contexto
const valorDoContexto = 'Valor do Contexto';
return (
<MeuContexto.Provider value={valorDoContexto}>
{children}
</MeuContexto.Provider>
);
};
const MeuComponente = () => {
// Utilizar o useContext para acessar o valor do contexto
const contexto = useContext(MeuContexto);
return <p>Valor do Contexto: {contexto}</p>;
};
Neste exemplo, MeuContexto
é criado usando createContext()
e, em seguida, é utilizado dentro de ProvedorDoContexto
para envolver o componente MeuComponente
. O valor do contexto ('Valor do Contexto'
) é fornecido através do value
do provedor e acessado em MeuComponente
usando useContext
.
Caso de uso
O useContext
facilita o compartilhamento de valores importantes em toda a aplicação. Vamos considerar um exemplo onde o contexto é utilizado para compartilhar informações de autenticação:
import React, { createContext, useContext, useState } from 'react';
const AuthContext = createContext();
// Provedor do contexto
const AuthProvider = ({ children }) => {
const [usuario, setUsuario] = useState(null);
const fazerLogin = (nome) => {
setUsuario({ nome });
};
const fazerLogout = () => {
setUsuario(null);
};
return (
<AuthContext.Provider value={{ usuario, fazerLogin, fazerLogout }}>
{children}
</AuthContext.Provider>
);
};
const MeuComponente = () => {
// Utilizar o useContext para acessar o valor do contexto
const { usuario, fazerLogin, fazerLogout } = useContext(AuthContext);
return (
<div>
{usuario ? (
<>
<p>Bem-vindo, {usuario.nome}!</p>
<button onClick={fazerLogout}>Logout</button>
</>
) : (
<>
<p>Por favor, faça login.</p>
<button onClick={() => fazerLogin('Usuário')} >Login</button>
</>
)}
</div>
);
};
// Utilizar o provedor do contexto para envolver componentes
const App = () => {
return (
<AuthProvider>
<MeuComponente />
</AuthProvider>
);
};
Neste exemplo, AuthContext
é utilizado para criar um contexto que fornece informações de autenticação. O AuthProvider
envolve os componentes que desejam acessar essas informações, e MeuComponente
utiliza useContext(AuthContext)
para interagir com o estado de autenticação.
Uso com Provedor Externo
O useContext
pode ser utilizado com um provedor externo, permitindo que componentes acessem valores de contexto de diferentes partes da árvore de componentes sem a necessidade de passar propriedades manualmente.
import React, { createContext, useContext } from 'react';
import { valorExterno } from "./dados"
// Criar um contexto
const MeuContexto = createContext();
const ProvedorExterno = ({ children, valorDoContexto }) => (
<MeuContexto.Provider value={valorDoContexto}>
{children}
</MeuContexto.Provider>
);
const ComponenteConsumidor = () => {
// Utilizar o useContext para acessar o valor do contexto
const contexto = useContext(MeuContexto);
return <p>Valor do Contexto: {contexto}</p>;
};
const App = () => (
<ProvedorExterno valorDoContexto={valorExterno}>
<ComponenteConsumidor />
</ProvedorExterno>
);
Neste exemplo, ProvedorExterno
serve como um provedor de contexto fora da árvore de componentes. ComponenteConsumidor
consome o contexto utilizando useContext
e tem acesso ao valor fornecido pelo ProvedorExterno
.