Understanding What Can Run in Next.js Server Components
📖 Scenario: You are building a Next.js app that uses server components to fetch and display data securely and efficiently.
🎯 Goal: Learn which code and operations can run inside Next.js server components by creating a simple server component that fetches data and renders it.
📋 What You'll Learn
Create a server component file with the exact name ServerData.js
Define an async function called fetchData inside the component
Use fetch to get data from https://jsonplaceholder.typicode.com/posts/1
Render the fetched data inside the component
Do not use any client-side hooks or browser-only APIs inside the server component
💡 Why This Matters
🌍 Real World
Server components help build fast, secure web apps by fetching data on the server and sending ready HTML to the browser.
💼 Career
Understanding server components is essential for modern Next.js development, improving performance and security in professional web projects.
Progress0 / 4 steps
1
Create the Server Component File
Create a file named ServerData.js and export a default async function called ServerData that returns a simple <div> with the text Loading data....
NextJS
Hint
This is the basic structure of a server component in Next.js. It must be an async function if you plan to fetch data.
2
Add Data Fetching Logic
Inside the ServerData function, create an async function called fetchData that uses fetch to get JSON data from https://jsonplaceholder.typicode.com/posts/1 and returns the parsed JSON.
NextJS
Hint
Use await fetch(url) and then await res.json() to get the data.
3
Use the Fetched Data in the Component
Call the fetchData function inside ServerData and store the result in a variable called post. Then return a <div> that displays the post.title inside an <h1> and the post.body inside a <p>.
NextJS
Hint
Remember to await the fetchData() call and use JSX to display the data.
4
Confirm Server Component Restrictions
Ensure that the ServerData component does not use any client-side hooks like useState or browser-only APIs such as window or document. Add a comment inside the component explaining that server components run only on the server and can safely fetch data.
NextJS
Hint
Server components do not use useState or window. Add a comment to explain this.
Practice
(1/5)
1. Which of the following can you safely run inside a Next.js server component?
easy
A. Manipulating the DOM directly
B. Accessing a database directly
C. Adding event listeners for user clicks
D. Using browser APIs like localStorage
Solution
Step 1: Understand server component environment
Server components run only on the server, so they can use server-only features like database access.
Step 2: Identify client-only features
Browser APIs, event listeners, and DOM manipulation require client-side JavaScript and cannot run in server components.
Final Answer:
Accessing a database directly -> Option B
Quick Check:
Server-only code = Access database [OK]
Hint: Server components run server code only, no browser APIs [OK]
Common Mistakes:
Thinking client APIs like localStorage work in server components
Trying to add event listeners in server components
Assuming DOM manipulation is possible on server
2. Which syntax correctly imports a server-only module inside a Next.js server component?
easy
A. import localStorage from 'localStorage';
B. import { useState } from 'react';
C. import window from 'window';
D. import fs from 'fs';
Solution
Step 1: Recognize server-only modules
Modules like 'fs' (file system) are server-only and can be imported in server components.
Step 2: Identify invalid imports
useState is client-side React hook, window and localStorage are browser globals, not importable modules.
Final Answer:
import fs from 'fs'; -> Option D
Quick Check:
Server module import = fs [OK]
Hint: Only import Node.js modules like fs in server components [OK]
Common Mistakes:
Importing client hooks like useState in server components
Trying to import browser globals as modules
Confusing client and server imports
3. Given this server component code, what will be rendered?
import fs from 'fs';
export default function Page() {
const data = fs.readFileSync('data.txt', 'utf8');
return <div>{data}</div>;
}
medium
A. Contents of data.txt file inside a div
B. Error: fs module not found
C. Empty div with no content
D. Client-side error about fs usage
Solution
Step 1: Understand server component execution
The code runs on the server, so fs.readFileSync reads the file content successfully.
Step 2: Render the file content
The content read from 'data.txt' is returned inside a div and sent as HTML to the client.
Final Answer:
Contents of data.txt file inside a div -> Option A
Quick Check:
Server read file = content rendered [OK]
Hint: Server components can read files and render content directly [OK]
B. onClick handlers are not allowed in server components
C. useState cannot be used in server components
D. No error, code works fine
Solution
Step 1: Check React hooks usage in server components
useState is a client-side hook and cannot be used in server components.
Step 2: Check event handlers in server components
onClick handlers require client-side JavaScript and are not supported in server components.
Final Answer:
Both A and B -> Option A
Quick Check:
useState + onClick invalid in server components [OK]
Hint: No React hooks or event handlers in server components [OK]
Common Mistakes:
Using useState in server components
Adding client event handlers in server components
Assuming server components can handle user events
5. You want to fetch data from a database and display it in a Next.js app. Which approach best uses server components to improve performance and security?
hard
A. Fetch data in the browser using fetch API directly
B. Fetch data inside a client component using useEffect
C. Fetch data inside a server component and pass it as props to a client component
D. Fetch data in a client component and store it in localStorage
Solution
Step 1: Understand server component advantages
Server components can securely fetch data on the server, avoiding exposing secrets or extra client JS.
Step 2: Use server component to fetch and pass data
Fetching data in server component and passing it as props to client components optimizes performance and security.
Final Answer:
Fetch data inside a server component and pass it as props to a client component -> Option C
Quick Check:
Server fetch + props passing = best practice [OK]
Hint: Fetch data server-side, then pass to client components [OK]
Common Mistakes:
Fetching data only on client causing slower load
Exposing secrets by fetching in client
Storing sensitive data in localStorage
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.