📖 Scenario: You are building a simple Next.js app that shows a button to count clicks. The button needs to update the count on the client side.
🎯 Goal: Create a React component in Next.js that uses the 'use client' directive to enable client-side interactivity with a button that increments a counter.
📋 What You'll Learn
Create a React component file named Counter.jsx.
Add the 'use client' directive at the top of the component file.
Use the useState hook to create a count state variable starting at 0.
Render a button that shows the current count and increments it by 1 when clicked.
💡 Why This Matters
🌍 Real World
Client components in Next.js allow interactive UI elements like buttons, forms, and animations that need to update without refreshing the page.
💼 Career
Understanding the 'use client' directive is essential for Next.js developers to build modern, responsive web apps with React hooks and client-side interactivity.
Progress0 / 4 steps
1
Create the Counter component file
Create a new file named Counter.jsx and add the 'use client' directive as the very first line in the file.
NextJS
Hint
The 'use client' directive must be the first line in the file before any imports or code.
2
Import useState and create count state
In Counter.jsx, import useState from react and create a state variable called count initialized to 0 using useState.
NextJS
Hint
Use const [count, setCount] = useState(0) inside the component function.
3
Render a button showing count and increment on click
In the Counter component, return a <button> element that displays the text Count: {count} and increments count by 1 when clicked using setCount.
NextJS
Hint
Use onClick={() => setCount(count + 1)} on the button element.
4
Use the Counter component in a Next.js page
Create a new file named page.jsx in the same folder and import the Counter component. Then render the <Counter /> component inside the default exported function.
NextJS
Hint
Import Counter and use it inside the page component's return.
Practice
(1/5)
1. What is the main purpose of the use client directive in Next.js?
easy
A. To enable server-side rendering for a component
B. To define API routes in Next.js
C. To import CSS styles globally
D. To mark a component to run only in the browser
Solution
Step 1: Understand the role of use client
The directive tells Next.js that the component should run on the client side (browser) instead of the server.
Step 2: Identify when to use it
It is used when components use React hooks or browser-specific APIs that require client-side execution.
Final Answer:
To mark a component to run only in the browser -> Option D
Quick Check:
Client directive = run in browser [OK]
Hint: Remember: use client means browser-only code [OK]
Common Mistakes:
Thinking it enables server-side rendering
Using it to import styles
Confusing it with API route setup
2. Where should the use client directive be placed in a Next.js component file?
easy
A. At the very top, before any imports or code
B. After all imports but before the component function
C. Inside the component function body
D. At the bottom of the file
Solution
Step 1: Recall the directive placement rule
The use client directive must be the first line in the file to be recognized properly.
Step 2: Understand why placement matters
Placing it first ensures Next.js treats the entire file as a client component before processing imports or code.
Final Answer:
At the very top, before any imports or code -> Option A
Quick Check:
Directive first line = correct placement [OK]
Hint: Always put use client as the first line [OK]
Common Mistakes:
Placing it inside the component function
Putting it after imports
Adding it at the file end
3. Given this Next.js component code, what will happen when it is rendered?
The component uses useState hook but lacks the use client directive, which is required for client-side hooks.
Step 2: Verify other code parts
Imports and JSX syntax are correct, and the state variable is initialized properly.
Final Answer:
Missing use client directive at the top -> Option B
Quick Check:
Hooks need use client directive [OK]
Hint: Hooks require use client directive to work [OK]
Common Mistakes:
Ignoring the missing directive
Thinking import is wrong
Assuming JSX syntax error
5. You want to create a Next.js component that uses useState and also fetches data from an API on the client side using useEffect. Which is the correct way to set up this component?
hard
A. "use server"; import { useState, useEffect } from 'react'; export default function DataFetcher() { const [data, setData] = useState(null); useEffect(() => { fetch('/api/data').then(res => res.json()).then(setData); }, []); return
{data ? JSON.stringify(data) : 'Loading...'}
; }
B. import { useState, useEffect } from 'react'; export default function DataFetcher() { const [data, setData] = useState(null); useEffect(() => { fetch('/api/data').then(res => res.json()).then(setData); }, []); return
{data ? JSON.stringify(data) : 'Loading...'}
; }
C. "use client"; import { useState, useEffect } from 'react'; export default function DataFetcher() { const [data, setData] = useState(null); useEffect(() => { fetch('/api/data').then(res => res.json()).then(setData); }, []); return
{data ? JSON.stringify(data) : 'Loading...'}
; }
D. "use client"; import { useState } from 'react'; export default function DataFetcher() { const [data, setData] = useState(null); fetch('/api/data').then(res => res.json()).then(setData); return
{data ? JSON.stringify(data) : 'Loading...'}
; }
Solution
Step 1: Confirm client directive usage
Since the component uses hooks (useState, useEffect) and browser APIs, it must start with "use client";.
Step 2: Check correct hook usage for data fetching
Data fetching should be inside useEffect to run after render, avoiding side effects during rendering.