SSR (Server-Side Rendering) creates web pages on the server each time a user requests them. This lets the page show fresh, changing information instead of fixed content.
Why SSR enables dynamic content in Astro
---
export const prerender = false;
const data = await fetchData();
---
<html>
<body>
<h1>{data.title}</h1>
</body>
</html>The frontmatter runs on the server before sending the page.
You can fetch fresh data inside the frontmatter to show dynamic content.
---
export const prerender = false;
const time = new Date().toLocaleTimeString();
---
<p>Current time: {time}</p>---
export const prerender = false;
const user = await getUser(Astro.params.id);
---
<h1>Welcome, {user.name}!</h1>This Astro component uses SSR to show a greeting with the current time. Each time you reload, the time updates because the server creates the page fresh.
--- export const prerender = false; const message = `Hello! The time is ${new Date().toLocaleTimeString()}`; --- <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>SSR Dynamic Content</title> </head> <body> <h1>{message}</h1> </body> </html>
SSR runs on the server, so it can access databases or APIs securely.
Dynamic content means the page can change for each user or moment.
SSR helps with SEO because search engines get fully rendered pages.
SSR builds pages on the server every time a user visits.
This lets pages show fresh, changing information easily.
Use SSR when you want content that updates or depends on the user.
Practice
Solution
Step 1: Understand SSR page generation
SSR builds the page on the server every time a user visits, not just once.Step 2: Connect SSR to dynamic data
This means the server can include fresh or user-specific data before sending the page.Final Answer:
Because SSR builds the page on the server each time a user requests it, allowing fresh data. -> Option DQuick Check:
SSR = fresh server-built pages [OK]
- Thinking SSR sends static files only
- Confusing SSR with client-side rendering
- Assuming SSR caches pages forever
Solution
Step 1: Recall SSR enabling syntax in Astro
Astro usesexport const prerender = false;to enable server-side rendering.Step 2: Check other options for correctness
Exporting prerender = true; results in static rendering, the import is invalid, and the const assignment uses wrong syntax.Final Answer:
export const prerender = false; -> Option BQuick Check:
SSR enabled byexport const prerender = false;[OK]
- Using prerender = true instead of false to enable SSR
- Trying to import prerender as a module
- Assigning prerender as a string instead of boolean
export const prerender = false;
const time = new Date().toLocaleTimeString();
---
<div>Current time: {time}</div>What will the user see when they reload the page multiple times?
Solution
Step 1: Understand SSR effect on dynamic values
With prerender = false, the server runs the code on each request, sonew Date()is fresh every time.Step 2: Predict output on reload
Reloading the page triggers server to build new HTML with current time, so time updates.Final Answer:
The time shown updates on each reload to the current server time. -> Option AQuick Check:
SSR runs code fresh each request [OK]
- Thinking time is fixed after first build
- Assuming client JS updates time instead
- Believing Date is disallowed in SSR
export const prerender = false;
const userName = fetchUserName();
---
<div>Hello, {userName}!</div>But it shows "Hello, undefined!" What is the likely problem?
Solution
Step 1: Identify async function usage
fetchUserName() likely returns a Promise, so it must be awaited to get the value.Step 2: Understand why undefined appears
Without await, userName is a Promise object, which renders as undefined in template.Final Answer:
fetchUserName()is asynchronous but used without await. -> Option CQuick Check:
Async functions need await to get values [OK]
- Forgetting to await async functions
- Assuming SSR is off by default
- Thinking variables must be inside template tags
export const prerender = false;
async function getUserName() {
return await fetch('/api/user').then(res => res.json()).then(data => data.name);
}
const userName = await getUserName();
---
<h1>Welcome back, {userName}!</h1>Why does this work to show dynamic content?
Solution
Step 1: Analyze async data fetching in SSR
The async function runs on the server every time a user requests the page, so it fetches fresh data.Step 2: Understand dynamic content generation
Since SSR builds the page per request, the greeting updates with the latest user info.Final Answer:
Because SSR runs the async function on the server per request, fetching fresh user data each time. -> Option AQuick Check:
SSR + async fetch = fresh dynamic content [OK]
- Thinking Astro caches async results forever
- Assuming client runs async fetch after load
- Believing SSR disables async functions
Ready to prove it?
Pass the test and this pattern moves unknown
