📖 Scenario: You are building a simple Next.js app that shares a theme color across multiple client components using React Context.This helps keep the color consistent without passing props manually through every component.
🎯 Goal: Create a React Context to hold a theme color string, provide it in a parent client component, and consume it in a child client component to display the color.
📋 What You'll Learn
Create a React Context with a default color value
Create a client component that provides the context value
Create a client component that consumes the context value
Use the context value to display the theme color text
💡 Why This Matters
🌍 Real World
React Context is used in real apps to share data like themes, user info, or settings across many components without passing props manually.
💼 Career
Understanding React Context and client components is essential for building scalable React and Next.js applications that manage shared state cleanly.
Progress0 / 4 steps
1
Create the React Context with default value
Create a React Context called ThemeContext with the default value 'blue'. Use createContext from react.
NextJS
Hint
Use import { createContext } from 'react' and then const ThemeContext = createContext('blue').
2
Create a client component to provide the theme
Create a client component called ThemeProvider that imports ThemeContext and uses ThemeContext.Provider to provide the value 'green' to its children. Add 'use client' at the top.
NextJS
Hint
Remember to add 'use client' at the top and wrap {children} with ThemeContext.Provider passing value="green".
3
Create a client component to consume the theme
Create a client component called ThemeDisplay that uses useContext from react to get the theme color from ThemeContext. Display the text The theme color is: {theme}. Add 'use client' at the top.
NextJS
Hint
Use const theme = useContext(ThemeContext) inside the component and return a paragraph showing the theme.
4
Use ThemeProvider and ThemeDisplay together
Create a client component called App that uses ThemeProvider to wrap ThemeDisplay. Add 'use client' at the top.
NextJS
Hint
Wrap <ThemeDisplay /> inside <ThemeProvider> and return it from App.
Practice
(1/5)
1. What is the main purpose of React context in client components?
easy
A. To share data easily without passing props through every component
B. To create new HTML elements dynamically
C. To style components with CSS
D. To handle browser events like clicks and scrolls
Solution
Step 1: Understand React context role
React context allows sharing data across components without manually passing props at every level.
Step 2: Compare with other options
Creating HTML elements, styling, and event handling are unrelated to React context's main purpose.
Final Answer:
To share data easily without passing props through every component -> Option A
Quick Check:
React context = data sharing without prop drilling [OK]
Hint: Context shares data without passing props everywhere [OK]
Common Mistakes:
Confusing context with styling or event handling
Thinking context creates HTML elements
Believing context is for CSS only
2. Which of the following is the correct way to access React context in a client component?
easy
A. const value = useRef(MyContext);
B. const value = useState(MyContext);
C. const value = useContext(MyContext);
D. const value = useEffect(MyContext);
Solution
Step 1: Identify the hook for context access
React provides the useContext hook to access context values inside client components.
Step 2: Eliminate other hooks
useState manages state, useEffect handles side effects, and useRef manages references, none access context.
Final Answer:
const value = useContext(MyContext); -> Option C
Quick Check:
useContext hook = context access [OK]
Hint: Use useContext to read context in components [OK]
Common Mistakes:
Using useState or useEffect instead of useContext
Trying to access context without a hook
Confusing useRef with context access
3. Given this code snippet in a Next.js client component:
What will be displayed if DisplayTheme is rendered without a ThemeContext.Provider?
medium
A. Current theme: undefined
B. Current theme: light
C. Current theme: null
D. Error: Context provider missing
Solution
Step 1: Check default context value
The context is created with default value 'light', so if no Provider wraps the component, this default is used.
Step 2: Understand useContext behavior without Provider
useContext returns the default value when no Provider is found above in the tree.
Final Answer:
Current theme: light -> Option B
Quick Check:
Default context value used without Provider [OK]
Hint: Default context value shows if no Provider wraps component [OK]
Common Mistakes:
Expecting undefined or null instead of default value
Thinking it throws an error without Provider
Confusing default value with null
4. Identify the error in this Next.js client component using React context:
import { createContext, useContext } from 'react';
const UserContext = createContext();
export default function UserName() {
const user = useContext(UserContext);
return <div>User: {user.name}</div>;
}
medium
A. UserContext is not wrapped with a Provider, so user is undefined causing error
B. useContext hook is used incorrectly; should pass a string
C. Missing import of React from 'react'
D. Cannot use context inside client components
Solution
Step 1: Check context default value and Provider usage
UserContext is created without a default value and no Provider is shown wrapping UserName, so useContext returns undefined.
Step 2: Understand error cause
Accessing user.name when user is undefined causes a runtime error.
Final Answer:
UserContext is not wrapped with a Provider, so user is undefined causing error -> Option A
Quick Check:
Undefined context value causes error accessing properties [OK]
Hint: Always wrap context consumers with Provider to avoid undefined errors [OK]
Common Mistakes:
Assuming useContext needs a string argument
Forgetting to wrap with Provider
Thinking React import is mandatory in Next.js 13+ client components
5. You want to create a theme toggle in a Next.js client component using React context. Which approach correctly updates the theme value across components?
hard
A. Pass theme as a prop to every component without using context
B. Create ThemeContext with a fixed string; update theme by changing the string directly in components
C. Use useState inside each component separately without context to manage theme
D. Create a ThemeContext with state and provide toggle function via Provider; use useContext to read and update theme
Solution
Step 1: Understand state sharing with context
To update theme globally, context must provide state and a function to toggle it, so all components share and update the same state.
Step 2: Evaluate other options
Fixed string cannot update dynamically; separate useState per component does not share state; passing props everywhere defeats context purpose.
Final Answer:
Create a ThemeContext with state and provide toggle function via Provider; use useContext to read and update theme -> Option D
Quick Check:
Context with state and updater shares dynamic data [OK]
Hint: Use context Provider with state and updater for shared dynamic data [OK]
Common Mistakes:
Trying to update fixed context value directly
Using separate state in each component without sharing
Passing props everywhere instead of using context
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.