📖 Scenario: You are building a simple Next.js app that shows a welcome message with a user's name fetched on the server side.This simulates a real website greeting a logged-in user by their name.
🎯 Goal: Build a Next.js page that fetches a user's name on the server side and passes it as state to the React component to display a personalized greeting.
📋 What You'll Learn
Create a server-side function to fetch user data
Pass the fetched user name as props to the page component
Render the user name inside the component
Use Next.js App Router conventions with a server component
💡 Why This Matters
🌍 Real World
Many websites greet users by name after logging in. This project shows how to fetch user info on the server and pass it to the client for personalized UI.
💼 Career
Understanding server-side state passing in Next.js is essential for building fast, SEO-friendly React apps with personalized content.
Progress0 / 4 steps
1
Create a server-side user data object
Create a constant called user with an object containing name set to 'Alice' inside the page.tsx file.
NextJS
Hint
Use const user = { name: 'Alice' } to create the user object.
2
Create a server component that returns user name as props
Create an async function called getUser that returns the user object. Then create an async Page component that calls getUser and passes the result as a prop called user to a component called Greeting.
NextJS
Hint
Define getUser to return the user object. Then in Page, await getUser() and pass the user to Greeting.
3
Create the Greeting component to display the greeting
Create a component called Greeting that accepts a user prop and renders a <h1> with the text Hello, {user.name}!.
NextJS
Hint
Accept user as a prop in Greeting and render Hello, {user.name}! in an <h1>.
4
Export the page component as default
Ensure the Page component is exported as the default export from the file using export default Page.
NextJS
Hint
Make sure the Page component is exported as default with export default async function Page().
Practice
(1/5)
1. What is the main purpose of getServerSideProps in Next.js?
easy
A. To manage browser cookies
B. To handle client-side routing
C. To style components dynamically
D. To fetch data on the server before rendering the page
Solution
Step 1: Understand getServerSideProps role
This function runs on the server before the page loads to fetch or prepare data.
Step 2: Identify its main use
It ensures the page has fresh data on first load and improves SEO by server-side rendering.
Final Answer:
To fetch data on the server before rendering the page -> Option D
Quick Check:
Server-side data fetching = A [OK]
Hint: Remember: server-side means before page shows [OK]
Common Mistakes:
Confusing client-side routing with server-side data fetching
Thinking it styles components
Assuming it manages cookies directly
2. Which of the following is the correct syntax to export getServerSideProps in a Next.js page?
getServerSideProps must be an async function exported with the exact name.
Step 2: Check return structure
It returns an object with a props key containing data for the page.
Final Answer:
export async function getServerSideProps(context) { return { props: {} } } -> Option B
Quick Check:
Correct async export with props = D [OK]
Hint: Use async function with named export and return props [OK]
Common Mistakes:
Using arrow function without export keyword
Returning object without wrapping props
Using default export incorrectly
3. Given this code snippet in a Next.js page, what will be the rendered output?
export async function getServerSideProps() {
return { props: { message: 'Hello from server' } };
}
export default function Page({ message }) {
return <h1>{message}</h1>;
}
medium
A. <h1>Hello from server</h1>
B. Error: message is undefined
C. <h1>{message}</h1>
D. <h1>Hello from client</h1>
Solution
Step 1: Understand data flow
getServerSideProps passes message as a prop to the page component.
Step 2: Render output
The component receives message and renders it inside an <h1> tag.
Final Answer:
<h1>Hello from server</h1> -> Option A
Quick Check:
Server prop passed and rendered = A [OK]
Hint: Props from server appear as component parameters [OK]
Common Mistakes:
Thinking props are undefined without client fetch
Rendering literal {message} instead of value
Confusing server message with client message
4. What is wrong with this getServerSideProps function?
export async function getServerSideProps() {
const data = await fetch('https://api.example.com/data');
return data;
}
medium
A. The returned props must be an object with a props key wrapping data
B. The fetch call is missing await
C. getServerSideProps cannot be async
D. The function should return data directly, not inside props
Solution
Step 1: Check fetch usage
The fetch is awaited correctly, so no issue there.
Step 2: Check return structure
The function must return an object with a props key containing an object. Here, data is returned directly, which is incorrect.
Final Answer:
The returned props must be an object with a props key wrapping data -> Option A
Quick Check:
Return { props: { ... } } not just data [OK]
Hint: Always wrap data inside props object in return [OK]
Common Mistakes:
Returning data directly instead of inside props
Forgetting to await fetch
Thinking async is not allowed
5. You want to pass user data fetched from a database to a Next.js page using getServerSideProps. Which approach correctly handles the asynchronous fetch and passes the data safely to the page component?
hard
A. export async function getServerSideProps() {
const user = getUserFromDB();
return { props: user };
}
B. export function getServerSideProps() {
const user = getUserFromDB();
return { props: { user } };
}
C. export async function getServerSideProps() {
const user = await getUserFromDB();
return { props: { user } };
}
D. export async function getServerSideProps() {
const user = await getUserFromDB();
return user;
}
Solution
Step 1: Handle async data fetching
The function must be async and await the database call to get user data.
Step 2: Return data wrapped in props object
The returned object must have a props key containing an object with user data.
Final Answer:
export async function getServerSideProps() {
const user = await getUserFromDB();
return { props: { user } };
} -> Option C
Quick Check:
Async await + return props object = C [OK]
Hint: Await async fetch and wrap result inside props [OK]
Common Mistakes:
Not awaiting async database call
Returning data directly without props wrapper
Using non-async function for async fetch
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.