Bird
Raised Fist0
NextJSframework~20 mins

Cache invalidation strategies in NextJS - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Cache Mastery in Next.js
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
What happens when you use stale-while-revalidate in Next.js caching?
In Next.js, when you use the stale-while-revalidate cache control header, what is the expected behavior when a cached page is requested after the stale time has passed?
AThe cached page is discarded and a 404 error is returned until the fresh page is generated.
BThe request waits until the fresh page is fetched before serving any content to the user.
CThe cached page is served immediately while Next.js fetches a fresh version in the background to update the cache.
DThe cache is cleared and the user is redirected to the homepage.
Attempts:
2 left
💡 Hint
Think about how stale-while-revalidate balances speed and freshness.
❓ component_behavior
intermediate
2:00remaining
How does Next.js ISR (Incremental Static Regeneration) handle cache invalidation?
Given a Next.js page using ISR with revalidate: 10, what happens when a user requests the page after 15 seconds since the last generation?
NextJS
export async function getStaticProps() {
  return {
    props: { time: Date.now() },
    revalidate: 10
  };
}
ANext.js serves the cached page immediately and triggers a background regeneration of the page.
BNext.js waits for the page to regenerate before serving it to the user.
CNext.js serves a 404 error because the cache expired.
DNext.js disables caching and regenerates the page on every request.
Attempts:
2 left
💡 Hint
ISR allows pages to update without rebuilding the whole site.
📝 Syntax
advanced
2:00remaining
Which Next.js cache control header syntax correctly sets a 1-hour max-age with stale-while-revalidate?
Choose the correct way to set the Cache-Control header in Next.js API route to cache for 1 hour and allow stale content while revalidating.
NextJS
export default function handler(req, res) {
  // Set cache control header here
  res.status(200).json({ message: 'Hello' });
}
Ares.setHeader('Cache-Control', 'public max-age=3600 stale-while-revalidate=3600');
Bres.setHeader('Cache-Control', 'max-age=3600 stale-while-revalidate=3600');
Cres.setHeader('Cache-Control', 'public, max-age=3600; stale-while-revalidate=3600');
Dres.setHeader('Cache-Control', 'public, max-age=3600, stale-while-revalidate=3600');
Attempts:
2 left
💡 Hint
Headers use commas to separate directives.
🔧 Debug
advanced
2:00remaining
Why does this Next.js ISR page never update after deployment?
This Next.js page uses ISR with revalidate: 60. After deployment, the page content never changes even after 5 minutes. What is the most likely cause?
NextJS
export async function getStaticProps() {
  const data = await fetch('https://api.example.com/data').then(res => res.json());
  return {
    props: { data },
    revalidate: 60
  };
}
AThe <code>revalidate</code> value must be a string, not a number.
BThe API response is cached and does not change, so the page content stays the same.
CISR only works in development mode, not in production.
DThe <code>getStaticProps</code> function must return <code>revalidate</code> inside <code>props</code>.
Attempts:
2 left
💡 Hint
Consider what controls the data freshness besides ISR timing.
❓ state_output
expert
2:00remaining
What is the output of this Next.js API route with cache headers and multiple requests?
Consider this Next.js API route that sets cache headers and returns a timestamp. What will be the output of two requests made 5 seconds apart?
NextJS
let lastGenerated = 0;

export default function handler(req, res) {
  const now = Date.now();
  if (now - lastGenerated > 10000) {
    lastGenerated = now;
  }
  res.setHeader('Cache-Control', 'public, max-age=10');
  res.status(200).json({ timestamp: lastGenerated });
}
ABoth requests return the same timestamp because the cache max-age is 10 seconds.
BThe second request returns 0 because the cache expired and lastGenerated reset.
CBoth requests return different timestamps because the handler updates on every call.
DThe first request returns 0, the second returns a new timestamp 5 seconds later.
Attempts:
2 left
💡 Hint
Think about how max-age controls browser and CDN caching behavior.

Practice

(1/5)
1. In Next.js, which method allows you to update static pages after a certain time interval to keep data fresh without rebuilding the entire site?
easy
A. getServerSideProps without caching
B. Manually clearing browser cache
C. Using client-side useEffect to fetch data
D. getStaticProps with revalidate

Solution

  1. Step 1: Understand Next.js data fetching methods

    getStaticProps generates static pages at build time, but with revalidate, it can update pages after a set interval.
  2. Step 2: Compare with other methods

    getServerSideProps fetches fresh data on every request but does not use caching or revalidation intervals.
  3. Final Answer:

    getStaticProps with revalidate -> Option D
  4. Quick Check:

    Incremental Static Regeneration = getStaticProps + revalidate [OK]
Hint: Remember: revalidate updates static pages periodically [OK]
Common Mistakes:
  • Confusing getServerSideProps with revalidation
  • Thinking client-side fetching is cache invalidation
  • Assuming manual browser cache clearing affects server cache
2. Which of the following is the correct way to set a revalidation time of 10 seconds in getStaticProps?
easy
A. return { props: {}, revalidate: 10 }
B. return { props: {}, revalidateTime: 10 }
C. return { props: {}, cache: 10 }
D. return { props: {}, refresh: 10 }

Solution

  1. Step 1: Recall the correct property name for revalidation

    The Next.js documentation specifies revalidate as the property to set seconds for incremental static regeneration.
  2. Step 2: Check the return object structure

    The return object from getStaticProps must include props and optionally revalidate with a number value.
  3. Final Answer:

    return { props: {}, revalidate: 10 } -> Option A
  4. Quick Check:

    Property name is revalidate [OK]
Hint: Use exact property name 'revalidate' in return object [OK]
Common Mistakes:
  • Using incorrect property names like 'revalidateTime' or 'refresh'
  • Placing revalidate outside the return object
  • Setting revalidate as a string instead of a number
3. Consider this Next.js code snippet:
export async function getStaticProps() {
  return {
    props: { time: Date.now() },
    revalidate: 5
  };
}

What will happen if you visit this page multiple times within 5 seconds?
medium
A. The page will throw an error due to Date.now() in getStaticProps
B. The page will show the same timestamp for all visits within 5 seconds
C. The page will update the timestamp on every visit
D. The page will never update the timestamp

Solution

  1. Step 1: Understand revalidate behavior

    The revalidate: 5 means Next.js will regenerate the page at most every 5 seconds.
  2. Step 2: Predict output within 5 seconds

    Within 5 seconds, the cached page is served, so the timestamp remains the same for all visits.
  3. Final Answer:

    The page will show the same timestamp for all visits within 5 seconds -> Option B
  4. Quick Check:

    Revalidate interval caches page for 5 seconds [OK]
Hint: Revalidate caches page until interval expires [OK]
Common Mistakes:
  • Assuming timestamp updates on every visit
  • Thinking Date.now() causes errors in static props
  • Believing revalidate disables caching
4. You wrote this code in Next.js:
export async function getStaticProps() {
  return {
    props: { data: await fetchData() },
    revalidate: '10'
  };
}

Why does this cause a problem?
medium
A. Because revalidate must be a number, not a string
B. Because fetchData cannot be awaited in getStaticProps
C. Because props must be a function, not an object
D. Because revalidate cannot be used with getStaticProps

Solution

  1. Step 1: Check the type of revalidate

    The revalidate property expects a number representing seconds, not a string.
  2. Step 2: Understand impact of wrong type

    Passing a string causes Next.js to throw a type error or ignore the revalidation, breaking cache invalidation.
  3. Final Answer:

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

    Revalidate value type = number [OK]
Hint: Use number type for revalidate seconds [OK]
Common Mistakes:
  • Passing revalidate as a string
  • Thinking async/await is disallowed in getStaticProps
  • Confusing props structure requirements
5. You want to always serve fresh data on every request in Next.js without caching. Which method should you use and why?
hard
A. Use getStaticProps without revalidate
B. Use getStaticProps with revalidate: 0
C. Use getServerSideProps because it runs on every request
D. Use client-side fetching only with useEffect

Solution

  1. Step 1: Identify method for fresh data every request

    getServerSideProps runs on the server for every page request, ensuring fresh data.
  2. Step 2: Compare with static methods

    getStaticProps generates static pages at build time or with revalidation intervals, so it does not guarantee fresh data every request.
  3. Final Answer:

    Use getServerSideProps because it runs on every request -> Option C
  4. Quick Check:

    Fresh data every request = getServerSideProps [OK]
Hint: Always fresh data? Use getServerSideProps [OK]
Common Mistakes:
  • Using revalidate: 0 expecting no caching
  • Relying only on client-side fetching for SEO
  • Confusing static and server-side methods
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