Em React Native/Expo, a Context API é uma maneira eficiente de compartilhar dados entre vários componentes sem precisar passar props manualmente de um componente pai para seus filhos, o que pode ser especialmente útil em aplicações com estruturas de componentes complexas. A função getContext
em React Native não existe diretamente; o correto é usar React.createContext()
e os hooks como useContext()
para acessar dados de um contexto globalmente.
Como Funciona a Context API
- Criação do Contexto:
Você primeiro cria um contexto comReact.createContext()
. Esse contexto pode conter qualquer valor que você deseja compartilhar, como um objeto de estado ou funções. - Provider:
O Provider é um componente que “envolve” seus componentes filhos e fornece o valor do contexto para eles. Qualquer componente dentro da árvore que for envolvido por esseProvider
pode acessar os dados fornecidos. - useContext Hook:
Para acessar os dados fornecidos pelo contexto, os componentes filhos usam o hookuseContext()
. Esse hook permite ler o valor do contexto diretamente, sem a necessidade de prop drilling (passar dados por múltiplos níveis de componentes).
Exemplo de Uso Completo do Context
Aqui está um exemplo detalhado de como usar o Context API para passar dados em um aplicativo React Native/Expo.
1. Criação do Contexto e Provider
import React, { createContext, useState } from 'react';
import { View, Text, Button } from 'react-native';
// Cria o contexto
const UserContext = createContext();
// Componente Provider que vai fornecer o contexto
const UserProvider = ({ children }) => {
const [user, setUser] = useState("John Doe");
return (
<UserContext.Provider value={{ user, setUser }}>
{children}
</UserContext.Provider>
);
};
// Componente principal da aplicação
export default function App() {
return (
<UserProvider>
<View>
<Text>App Component</Text>
<UserDisplay />
<UserChange />
</View>
</UserProvider>
);
}
2. Usando o Contexto com useContext
Agora que o UserProvider
está fornecendo o valor do contexto, podemos acessar esse valor em qualquer componente filho usando o hook useContext
.
import React, { useContext } from 'react';
import { View, Text, Button } from 'react-native';
import { UserContext } from './path_to_context_file';
// Componente que exibe o nome do usuário
const UserDisplay = () => {
const { user } = useContext(UserContext); // Acessa o valor do contexto
return (
<View>
<Text>Usuário Atual: {user}</Text>
</View>
);
};
// Componente que permite alterar o nome do usuário
const UserChange = () => {
const { setUser } = useContext(UserContext); // Acessa a função setUser do contexto
return (
<View>
<Button title="Trocar Usuário" onPress={() => setUser("Jane Doe")} />
</View>
);
};
Explicação Passo a Passo:
- Criação do Contexto:
- Criamos o
UserContext
usandocreateContext()
. Este contexto vai armazenar o nome do usuário e uma função para alterá-lo.
- UserProvider:
- O
UserProvider
é o componente que envolve a árvore de componentes. Ele contém o estadouser
e a funçãosetUser
. Esses valores são passados para oUserContext.Provider
, o que permite que qualquer componente “filho” que esteja dentro deUserProvider
acesse esses valores.
- useContext:
- Nos componentes
UserDisplay
eUserChange
, usamos o hookuseContext(UserContext)
para acessar diretamente ouser
e a funçãosetUser
. OuseContext
facilita o acesso aos dados do contexto sem precisar passar props manualmente por todos os componentes.
Benefícios do Context API:
- Reduz o Prop Drilling: Com o Context API, não é necessário passar dados manualmente por cada nível de componentes, o que simplifica muito o código em aplicações com estruturas complexas.
- Reutilização de Dados: O mesmo contexto pode ser usado em múltiplos componentes, tornando-o fácil de compartilhar dados globalmente pela aplicação.
- Flexibilidade: Você pode armazenar no contexto qualquer tipo de dados, como objetos de estado, funções ou valores simples.
Como Passar Dados Sem Context API
Se você preferir não usar a Context API, pode passar dados diretamente entre componentes usando props ou usar bibliotecas externas de gerenciamento de estado, como Redux. Porém, essas abordagens podem complicar o código quando muitos componentes precisam compartilhar o mesmo estado, especialmente em grandes aplicativos.
Quando Usar o Context API?
A Context API é ideal quando:
- Múltiplos componentes precisam acessar os mesmos dados.
- Você deseja evitar o “prop drilling”, onde os dados são passados através de muitos níveis de componentes.
- Sua aplicação tem um estado global que deve ser acessível em várias partes da interface.
Deixe um comentário