📖 Scenario: You are building a simple Next.js app that shows a welcome message fetched from the server. This will help you understand how Next.js renders pages first on the server before sending them to the browser.
🎯 Goal: Create a Next.js app with a server component that fetches a message and displays it. You will set up the data, configure a fetch function, use the server component to render the message, and complete the page structure.
📋 What You'll Learn
Create a server component that fetches data
Use async/await to fetch the message
Render the fetched message inside a React component
Use Next.js App Router conventions with a page.tsx file
💡 Why This Matters
🌍 Real World
Next.js is used to build fast websites that load content on the server first, improving performance and SEO.
💼 Career
Understanding server-first rendering in Next.js is essential for frontend developers working with modern React frameworks and building scalable web apps.
Progress0 / 4 steps
1
DATA SETUP: Create a simple message variable
Create a constant called message with the exact string value 'Welcome to Next.js server-first rendering!'.
NextJS
Hint
Use const message = '...' to create the message string.
2
CONFIGURATION: Create an async function to fetch the message
Create an async function called fetchMessage that returns the message constant.
NextJS
Hint
Define async function fetchMessage() { return message; }.
3
CORE LOGIC: Create a server component that uses fetchMessage
Create an async React component called Welcome that calls fetchMessage(), awaits its result, and returns a <div> containing the message inside a <p> tag.
NextJS
Hint
Use export default async function Welcome() { const msg = await fetchMessage(); return (<div><p>{msg}</p></div>); }.
4
COMPLETION: Add the page metadata export
Add an export called metadata with a title property set to 'Next.js Server Rendering'.
NextJS
Hint
Use export const metadata = { title: 'Next.js Server Rendering' };.
Practice
(1/5)
1. What is the main reason Next.js renders pages on the server first?
easy
A. To avoid using React components
B. To run JavaScript only on the client
C. To improve page load speed and SEO
D. To prevent any HTML from being sent to the browser
Solution
Step 1: Understand server-first rendering purpose
Next.js renders pages on the server to send fully formed HTML to the browser quickly.
Step 2: Connect server rendering to SEO and speed
Sending ready HTML helps search engines read content and users see pages faster.
Final Answer:
To improve page load speed and SEO -> Option C
Quick Check:
Server-first rendering = better speed and SEO [OK]
Hint: Server rendering means faster pages and better SEO [OK]
Common Mistakes:
Thinking server rendering delays page load
Believing React is not used in Next.js
Assuming HTML is not sent to the browser
2. Which Next.js function is used to fetch data on the server before rendering a page?
easy
A. getServerSideProps
B. componentDidMount
C. useEffect
D. getStaticProps
Solution
Step 1: Identify server-side data fetching functions
Next.js provides getServerSideProps to fetch data on the server at request time.
Step 2: Differentiate from other functions
getStaticProps runs at build time, useEffect and componentDidMount run on client side.
Final Answer:
getServerSideProps -> Option A
Quick Check:
Server data fetch = getServerSideProps [OK]
Hint: Server data fetch uses getServerSideProps [OK]
Common Mistakes:
Confusing getStaticProps with server-side fetching
Using client hooks like useEffect for server data
Thinking componentDidMount runs on server
3. Given this Next.js page code, what will the browser initially receive?
export async function getServerSideProps() {
return { props: { message: 'Hello from server' } };
}
export default function Page({ message }) {
return <h1>{message}</h1>;
}
medium
A. HTML with <h1>Hello from server</h1>
B. An empty page with no content
C. JavaScript code only, no HTML
D. A JSON object with the message
Solution
Step 1: Understand getServerSideProps role
This function runs on the server and passes props to the component before rendering.
Step 2: Determine what is sent to browser
The browser receives fully rendered HTML with the message inside an <h1> tag.
Final Answer:
HTML with <h1>Hello from server</h1> -> Option A
Quick Check:
Server props produce HTML output [OK]
Hint: Server props render HTML sent to browser first [OK]
Common Mistakes:
Expecting raw JavaScript or JSON instead of HTML
Thinking page is empty initially
Confusing client-side rendering with server rendering
4. What is wrong with this Next.js page code?
export async function getServerSideProps() {
const data = await fetch('https://api.example.com/data');
return { props: { data } };
}
export default function Page({ data }) {
return <div>{data.title}</div>;
}
medium
A. React components cannot use props
B. getServerSideProps cannot be async
C. Props cannot be passed to components
D. fetch returns a Response object, not JSON data
Solution
Step 1: Check fetch usage in getServerSideProps
fetch returns a Response object; to get JSON, .json() must be called.
Step 2: Identify missing JSON parsing
Without calling await data.json(), data is not the actual JSON, causing errors in rendering.
Final Answer:
fetch returns a Response object, not JSON data -> Option D
Quick Check:
fetch needs .json() to get data [OK]
Hint: Always parse fetch response with .json() in server props [OK]
Common Mistakes:
Assuming fetch returns JSON directly
Thinking getServerSideProps can't be async
Believing props can't be passed to components
5. You want to render a page that shows a list of users fetched from an API on every request. Which Next.js approach correctly ensures the page is server-rendered with fresh data each time?
hard
A. Use getStaticProps to fetch users at build time
B. Use getServerSideProps to fetch users on each request
C. Fetch users inside useEffect in the component
D. Hardcode the user list in the component
Solution
Step 1: Understand data freshness needs
Fetching fresh data on every request requires server-side fetching at request time.
Step 2: Match Next.js data fetching methods
getServerSideProps runs on each request, while getStaticProps runs once at build time.
Step 3: Evaluate client-side fetching
Fetching inside useEffect delays data until after page load, hurting SEO and initial render.
Final Answer:
Use getServerSideProps to fetch users on each request -> Option B
Quick Check:
Fresh server data = getServerSideProps [OK]
Hint: Fresh data each request? Use getServerSideProps [OK]
Common Mistakes:
Using getStaticProps for dynamic data
Fetching data only on client side
Hardcoding data instead of fetching
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.