Consumindo contexto com useContext
Leia valores de contexto dentro de qualquer componente aninhado usando o hook useContext, evitando a necessidade de passar props por componentes intermediários.
Consumindo contexto com useContext é uma aula grátis de React Native Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de React Native Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de React Native Academy inclui 4 aulas no total.
Partes desta aula ainda não foram traduzidas e aparecem em inglês.
Reading Context with useContext
The useContext(ContextObject) hook lets any function component subscribe to a context and read its current value. It replaces the older Consumer render prop pattern with a simple hook call. The component automatically re-renders whenever the context value changes.
import { useContext } from 'react';
import { ThemeContext } from '../context/ThemeContext';
function Header() {
const { theme } = useContext(ThemeContext);
return (
<View style={{ backgroundColor: theme === 'dark' ? '#1a1a2e' : '#fff' }}>
<Text>My App</Text>
</View>
);
}No Prop Drilling Required
The main benefit of useContext is that the consuming component does not need to receive props from its parent. The Header component in the previous example can be anywhere in the tree — three levels deep, inside a modal, or in a completely different branch — and it still reads the same theme value directly from context.
// Without context: theme prop drills through App→Screen→Section→Card→Header
// With context: Header reads theme directly from context
function DeepComponent() {
const { user } = useContext(AuthContext); // no props needed
return <Text>Welcome, {user.name}</Text>;
}Calling Actions from Context
Context can expose not just data but also functions that update the data. Call these functions directly from the consuming component without knowing where the state lives. The Provider handles the state update and all consumers that depend on the value re-render automatically.
function LogoutButton() {
const { logout } = useContext(AuthContext);
return (
<Button title='Sign Out' onPress={logout} />
);
}Using Multiple Contexts in One Component
A component can consume multiple contexts by calling useContext multiple times with different context objects. Each call is independent — a change in ThemeContext only causes re-renders in ThemeContext consumers, not in AuthContext consumers (unless they also depend on ThemeContext).
function ProfileScreen() {
const { user } = useContext(AuthContext);
const { theme } = useContext(ThemeContext);
return (
<View style={styles[theme]}>
<Text style={styles[theme + 'Text']}>
{user.name}
</Text>
</View>
);
}Context Value is the Latest Render
useContext always gives you the most recent value provided by the nearest matching Provider. When the Provider re-renders with a new value, React propagates the update to all consumers immediately, even if intermediate components between the Provider and consumer did not re-render. This is one of the key advantages over passing props through potentially non-rendering intermediaries.
Creating a useAuth Custom Hook
Instead of importing and calling useContext(AuthContext) in every component, wrap it in a custom useAuth hook. This abstracts away the context object import, makes the calling code more readable, and lets you add error checks or derived values in one place.
// context/AuthContext.js
export function useAuth() {
const ctx = useContext(AuthContext);
if (!ctx) throw new Error('useAuth must be inside AuthProvider');
return ctx;
}
// In any component
function NavBar() {
const { user, logout } = useAuth(); // clean and simple
return <Text>{user.email}</Text>;
}Guarding Routes with Context
A common pattern is to read auth state from context and conditionally render either the authenticated app stack or the login screen. The root navigator reads the user from AuthContext — when user is null it renders the auth screens, and when it is set it renders the main app screens.
function RootNavigator() {
const { user } = useAuth();
return (
<NavigationContainer>
{user ? <AppStack /> : <AuthStack />}
</NavigationContainer>
);
}Conditional Rendering Based on Context
Components can use context values to make render decisions. A premium feature component checks the user's subscription tier from context and renders either the full feature or a paywall CTA. This logic lives in the consuming component, keeping the Provider generic and reusable.
function PremiumFeature({ children }) {
const { user } = useAuth();
const isPro = user?.subscription === 'pro';
if (!isPro) {
return <UpgradePrompt />;
}
return children;
}Context in List Items
Context works inside FlatList renderItem components too. Each list item can read from context without props. Be mindful that if the context value changes, every visible list item will re-render — use React.memo and ensure the context value is stable (memoized) to mitigate the impact.
const CartItem = React.memo(({ item }) => {
const { addToCart } = useContext(CartContext);
return (
<View style={styles.row}>
<Text>{item.name}</Text>
<Button title='Add' onPress={() => addToCart(item)} />
</View>
);
});Context vs Props: When to Use Each
Use props for data that is naturally owned by the parent and directly relevant to the child's display. Use context for global or cross-cutting concerns: authentication, theme, language, cart state. Over-using context for local data makes components harder to understand and reuse in isolation, because their dependencies are implicit rather than explicit.
The useContext Return Value
useContext returns exactly the value passed to the nearest Provider's value prop. If no Provider is found above the component, it returns the default value given to createContext(). Destructure the returned object directly at the call site for cleaner, more readable code.
// Full value object
const themeContext = useContext(ThemeContext);
themeContext.theme; // 'light' or 'dark'
// Destructured (preferred)
const { theme, toggleTheme } = useContext(ThemeContext);
// From custom hook
const { user, login, logout } = useAuth();Quick Check
Test your understanding of consuming context with useContext from this lesson.
Lesson Recap
In this lesson you learned: useContext(ContextObject) reads the nearest Provider's value without prop drilling, a component can consume multiple contexts by calling useContext multiple times, and wrapping useContext in a custom hook gives a clean API with error checking. Next up we build a theme context with a dark mode toggle.
Perguntas Frequentes
A aula “Consumindo contexto com useContext” é grátis?
Sim — o texto completo de “Consumindo contexto com useContext” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de React Native Academy, atualize para CoddyKit PRO. O curso de React Native Academy inclui 4 aulas no total.
O que vou aprender em “Consumindo contexto com useContext”?
Leia valores de contexto dentro de qualquer componente aninhado usando o hook useContext, evitando a necessidade de passar props por componentes intermediários. Você pratica React Native Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar React Native Academy?
Nenhuma experiência prévia é necessária. React Native Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Consumindo contexto com useContext”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de React Native Academy?
Sim. Cada aula de React Native Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Criando e fornecendo um contexto
- Consumindo contexto com useContext
- Um contexto de tema com alternância para modo escuro
- Evitando problemas de desempenho do contexto