Server components run on the server by default to make web apps faster and simpler. They send only the needed HTML to the browser, saving time and data.
Why server components are the default in NextJS
export default function MyComponent() { return <h1>Hello from Server Component</h1> }
By default, components in Next.js 13+ are server components unless marked otherwise.
You can make a component a client component by adding 'use client' at the top.
export default function ServerComponent() { return <p>This runs on the server.</p> }
'use client' import { useState } from 'react' export default function ClientComponent() { const [count, setCount] = useState(0) return <button onClick={() => setCount(count + 1)}>Count: {count}</button> }
This component runs on the server by default and sends HTML to the browser.
export default function Greeting() { return <h2>Welcome to Server Components!</h2> }
Server components cannot use browser-only APIs like 'window' or 'document'.
They help reduce JavaScript bundle size sent to the client.
Use client components only when you need interactivity like event handlers.
Server components run on the server by default to improve speed and security.
They send only HTML to the browser, reducing data and load time.
Use client components only when you need browser features like state or events.
Practice
Solution
Step 1: Understand server component behavior
Server components run on the server and send only HTML to the browser, reducing data transfer and improving speed.Step 2: Compare with client components
Client components handle browser events and state, but server components focus on fast, secure rendering.Final Answer:
They improve speed by running on the server and sending only HTML to the browser. -> Option BQuick Check:
Server components = faster, secure HTML delivery [OK]
- Confusing server components with client-side event handling
- Thinking server components run in the browser
- Assuming server components manage state like client components
Solution
Step 1: Recall client component syntax
In Next.js, to mark a component as client-side, you add the directiveuse clientat the very top of the file.Step 2: Eliminate incorrect options
Wrapping in tags, special export syntax, or props flags are not valid ways to mark client components.Final Answer:
Add the directiveuse clientat the top of the file. -> Option CQuick Check:
Client component directive = 'use client' [OK]
- Trying to mark client components with props or wrappers
- Placing 'use client' inside the component body
- Confusing export syntax with client directives
export default function Page() {
return (
<div>Hello from server component</div>
)
}What will the browser receive when this page loads?
Solution
Step 1: Identify component type
The component has no 'use client' directive, so it is a server component by default.Step 2: Understand server component output
Server components render HTML on the server and send plain HTML to the browser without React event handlers.Final Answer:
Plain HTML content: <div>Hello from server component</div>. -> Option AQuick Check:
Server component output = plain HTML [OK]
- Expecting React interactivity without 'use client'
- Thinking server components cause errors without client directive
- Assuming server components send JavaScript to browser
export default function Button() {
const [count, setCount] = React.useState(0);
return <button onClick={() => setCount(count + 1)}>Clicked {count} times</button>;
}What is the main problem with this code in Next.js 13+?
Solution
Step 1: Check component type and hooks usage
The component uses React state and event handlers, which require client-side execution.Step 2: Identify missing client directive
Without the 'use client' directive at the top, this component is treated as a server component, so hooks and events won't work.Final Answer:
It lacks theuse clientdirective, so state and events won't work. -> Option DQuick Check:
State + events need 'use client' directive [OK]
- Forgetting to add 'use client' for interactive components
- Assuming hooks work in server components
- Thinking arrow functions cause syntax errors here
Solution
Step 1: Separate concerns by component type
Data fetching is best done in server components for security and speed, while interactive UI needs client components.Step 2: Combine server and client components properly
Use a server component to fetch and render data, then include a client component inside it for the button with state and events.Final Answer:
Use a server component for data fetching and embed a client component for the button with state. -> Option AQuick Check:
Server fetch + client interactivity = best practice [OK]
- Making entire page client-side losing server benefits
- Trying to fetch data inside client components
- Mixing state logic in server components
Ready to prove it?
Pass the test and this pattern moves unknown
