React’s useContext
Hook is a powerful tool that allows components to access global data without passing props manually at every level of the component tree. It helps manage state and share data like themes, user info, or language settings across components easily.
Why Use useContext
?
Normally in React, data is passed from parent to child components using props. But when the same data needs to be accessed by many components at different levels, prop-drilling (passing props through many components) becomes messy.
useContext
solves this problem by giving components direct access to shared data stored in a Context object.
How useContext
Works
To use useContext
, you need to:
- Create a Context
- Provide the Context to your app
- Consume the Context using
useContext
Let’s break it down.
1. Create a Context
import React, { createContext } from 'react';
const ThemeContext = createContext();
Here, we’re creating a context called ThemeContext
.
2. Provide the Context
Wrap your component tree (or part of it) with the ThemeContext.Provider
and pass the value you want to share.
<ThemeContext.Provider value="dark">
<App />
</ThemeContext.Provider>
Now, all components inside <App />
can access the value "dark"
using useContext
.
3. Use the Context
Inside any component, use useContext
to consume the context value.
import React, { useContext } from 'react';
function ThemedButton() {
const theme = useContext(ThemeContext);
return <button className={theme}>Click Me</button>;
}
Here, the theme
value will be "dark"
from the provider. No need to pass it down via props.
Real-Life Example
Imagine you have a login system. Instead of passing user data manually to every component, use a context.
Create User Context
import { createContext } from 'react';
export const UserContext = createContext();
Provide User Data
<UserContext.Provider value={{ name: 'Kirti', role: 'Admin' }}>
<Dashboard />
</UserContext.Provider>
Use in Component
import { useContext } from 'react';
import { UserContext } from './UserContext';
function Welcome() {
const user = useContext(UserContext);
return <h2>Welcome, {user.name}!</h2>;
}
No props needed — Welcome
component gets data directly using useContext
.
Benefits of useContext
No prop drilling
Cleaner and readable code
Easy global state sharing
Works great with useReducer
or state managers
When Not to Use useContext
While useContext
is handy, avoid using it for frequently changing data like form inputs or animations. For such cases, use local state (useState
) for better performance.
Summary
useContext
is a React Hook for consuming data from a Context.- It helps avoid prop drilling by giving direct access to shared values.
- It’s best used for global data like themes, authentication, or user info.
- Always use it with a Context provider (
<Context.Provider>
).
Quick Example:
const MyContext = createContext();
function Parent() {
return (
<MyContext.Provider value="Hello from Context!">
<Child />
</MyContext.Provider>
);
}
function Child() {
const value = useContext(MyContext);
return <p>{value}</p>; // Output: Hello from Context!
}
By using useContext
, your React apps become more maintainable, especially as they grow larger.