Bird
Raised Fist0
NextJSframework~5 mins

Revalidation patterns in NextJS

Choose your learning style10 modes available
Introduction

Revalidation patterns help keep your website data fresh by updating content after it is first loaded. This means users see up-to-date information without waiting for a full reload.

You want to show blog posts that update occasionally without rebuilding the whole site.
You have product prices that change and want to refresh them every few minutes.
You want to cache API data but still update it regularly for users.
You want to improve performance by serving cached pages but keep content fresh.
You want to avoid slow page loads by updating data in the background.
Syntax
NextJS
export const revalidate = 60; // seconds

export default async function Page() {
  const data = await fetch('https://api.example.com/data').then(res => res.json());
  return <main>{JSON.stringify(data)}</main>;
}

The revalidate export sets how often Next.js updates the page in seconds.

Using cache: 'no-store' in fetch disables caching for fresh data on each request.

Examples
This example updates the page every 10 seconds to show new posts.
NextJS
export const revalidate = 10;

export default async function Page() {
  const data = await fetch('https://api.example.com/posts').then(res => res.json());
  return <div>{data.length} posts loaded</div>;
}
Setting revalidate to 0 disables caching and fetches fresh data on every request.
NextJS
export const revalidate = 0;

export default async function Page() {
  const data = await fetch('https://api.example.com/data', { cache: 'no-store' }).then(res => res.json());
  return <pre>{JSON.stringify(data, null, 2)}</pre>;
}
This example updates the page once every hour (3600 seconds).
NextJS
export const revalidate = 3600;

export default async function Page() {
  const data = await fetch('https://api.example.com/stats').then(res => res.json());
  return <p>Stats updated hourly: {data.count}</p>;
}
Sample Program

This Next.js page fetches a todo item from an API and shows it. The page content updates every 30 seconds to keep data fresh without full reloads.

NextJS
export const revalidate = 30;

export default async function Page() {
  const response = await fetch('https://jsonplaceholder.typicode.com/todos/1');
  const todo = await response.json();

  return (
    <main>
      <h1>Todo Item</h1>
      <p><strong>ID:</strong> {todo.id}</p>
      <p><strong>Title:</strong> {todo.title}</p>
      <p><strong>Completed:</strong> {todo.completed ? 'Yes' : 'No'}</p>
      <p><em>Page revalidates every 30 seconds.</em></p>
    </main>
  );
}
OutputSuccess
Important Notes

Revalidation helps balance fast loading and fresh data.

Set revalidate to 0 for always fresh data but slower loads.

Use longer revalidation times for rarely changing data to save resources.

Summary

Revalidation patterns let Next.js update cached pages after a set time.

Use export const revalidate = seconds; to control update frequency.

This improves user experience by showing fresh data with good performance.

Practice

(1/5)
1. What does the revalidate export in Next.js control?
easy
A. How often a cached page updates after initial generation
B. The maximum number of pages to cache
C. The delay before a page is first generated
D. The priority of server-side rendering

Solution

  1. Step 1: Understand the role of revalidate

    The revalidate export sets the time in seconds for Next.js to update a cached page after it was first generated.
  2. Step 2: Compare options with this behavior

    Only How often a cached page updates after initial generation correctly describes this update frequency control. Other options describe unrelated concepts.
  3. Final Answer:

    How often a cached page updates after initial generation -> Option A
  4. Quick Check:

    Revalidate controls update frequency = D [OK]
Hint: Remember revalidate sets cache update time in seconds [OK]
Common Mistakes:
  • Confusing revalidate with cache size
  • Thinking revalidate delays first page generation
  • Mixing revalidate with rendering priority
2. Which of the following is the correct syntax to set a page to revalidate every 60 seconds in Next.js?
easy
A. export revalidate = 60;
B. export const revalidate = 60;
C. const revalidate = 60 export;
D. export const revalidate(60);

Solution

  1. Step 1: Recall correct export syntax in Next.js

    To export a constant, the syntax is export const name = value;.
  2. Step 2: Match this with revalidate usage

    export const revalidate = 60; matches this pattern exactly. Other options have syntax errors or misplaced keywords.
  3. Final Answer:

    export const revalidate = 60; -> Option B
  4. Quick Check:

    Correct export syntax = A [OK]
Hint: Use 'export const' to export revalidate value [OK]
Common Mistakes:
  • Omitting 'const' keyword
  • Using parentheses incorrectly
  • Placing export keyword after variable
3. Given this Next.js page code snippet:
export const revalidate = 10;

export default function Page() {
  return <div>Time: {Date.now()}</div>;
}

What will happen if you visit this page multiple times within 10 seconds?
medium
A. The page updates the timestamp on every visit immediately
B. The page never updates after the first visit
C. The page throws an error because Date.now() is not allowed
D. The page shows the same timestamp for 10 seconds before updating

Solution

  1. Step 1: Understand revalidate timing effect

    With revalidate = 10, Next.js caches the page and only regenerates it after 10 seconds.
  2. Step 2: Predict page behavior on multiple visits

    Within 10 seconds, the cached page is served, so the timestamp stays the same. After 10 seconds, it updates.
  3. Final Answer:

    The page shows the same timestamp for 10 seconds before updating -> Option D
  4. Quick Check:

    Revalidate caches page for 10 seconds = B [OK]
Hint: Revalidate delays page update by set seconds [OK]
Common Mistakes:
  • Assuming Date.now() updates on every visit
  • Thinking revalidate disables page updates
  • Confusing revalidate with client-side rendering
4. You wrote this code in a Next.js page:
export const revalidate = '30';

export default function Page() {
  return <div>Hello</div>;
}

What is the problem with this code?
medium
A. revalidate must be a number, not a string
B. Page component must be async to use revalidate
C. You cannot export revalidate in a page component
D. The return statement is missing parentheses

Solution

  1. Step 1: Check the type of revalidate value

    The revalidate export expects a number representing seconds, not a string.
  2. Step 2: Identify the error caused by wrong type

    Using a string will cause Next.js to ignore or error on revalidation timing.
  3. Final Answer:

    revalidate must be a number, not a string -> Option A
  4. Quick Check:

    revalidate requires number type = A [OK]
Hint: Use number, not quotes, for revalidate seconds [OK]
Common Mistakes:
  • Using quotes around the number
  • Thinking revalidate needs async function
  • Misunderstanding export rules
5. You want a Next.js page to show fresh data but also improve performance by caching for 5 minutes. Which revalidation pattern should you use?
export const revalidate = ?;

Choose the best value and explain why.
hard
A. 60, to update every minute for fresher data
B. 0, to disable caching and always fetch fresh data
C. 300, because 300 seconds equals 5 minutes, balancing freshness and caching
D. Infinity, to cache forever and never update

Solution

  1. Step 1: Convert 5 minutes to seconds

    5 minutes equals 300 seconds, so revalidate should be set to 300.
  2. Step 2: Understand caching vs freshness tradeoff

    Setting revalidate to 300 caches the page for 5 minutes, improving performance but still updating regularly.
  3. Step 3: Evaluate other options

    0 disables caching (no performance gain), 60 updates too often, Infinity never updates (stale data).
  4. Final Answer:

    300, because 300 seconds equals 5 minutes, balancing freshness and caching -> Option C
  5. Quick Check:

    5 minutes = 300 seconds revalidate [OK]
Hint: Set revalidate to seconds matching desired cache time [OK]
Common Mistakes:
  • Using 0 thinking it improves performance
  • Choosing too short or too long revalidate values
  • Confusing minutes with seconds
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard