The Context API is a way to share values (like state) between components without having to pass props manually at every level.
Example:
Let’s use context to provide user info globally.
// UserContext.js
import React, { createContext, useState } from 'react';
// Create the context
const UserContext = createContext();
// Create the provider component
export const UserProvider = ({ children }) => {
const [user, setUser] = useState({
username: 'JohnDoe',
email: 'johndoe@example.com',
});
const updateUser = (newUserData) => {
setUser((prevUser) => ({
...prevUser,
...newUserData,
}));
};
return (
<UserContext.Provider value={{ user, updateUser }}>
{children}
</UserContext.Provider>
);
};
export default UserContext;
// index.js or App.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import { UserProvider } from './UserContext';
ReactDOM.render(
<UserProvider>
<App />
</UserProvider>,
document.getElementById('root')
);
// Profile.js
import React, { useContext, useState } from 'react';
import UserContext from './UserContext';
const Profile = () => {
const { user, updateUser } = useContext(UserContext);
const [newUsername, setNewUsername] = useState('');
const handleUpdate = () => {
updateUser({ username: newUsername });
setNewUsername(''); // Clear the input
};
return (
<div>
<h2>User Profile</h2>
<p>Username: {user.username}</p>
<p>Email: {user.email}</p>
<input
type="text"
value={newUsername}
onChange={(e) => setNewUsername(e.target.value)}
placeholder="New Username"
/>
<button onClick={handleUpdate}>Update Username</button>
</div>
);
};
export default Profile;