Bird
Raised Fist0
NextJSframework~10 mins

GenerateStaticParams for static paths in NextJS - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Concept Flow - GenerateStaticParams for static paths
Define generateStaticParams function
Fetch or define list of params
Return array of params objects
Next.js uses params to build static pages
Static pages generated at build time
Pages served fast without server calls
The generateStaticParams function provides Next.js with all the dynamic route parameters it needs to pre-build static pages at build time.
Execution Sample
NextJS
export async function generateStaticParams() {
  return [
    { slug: 'post-1' },
    { slug: 'post-2' }
  ];
}
This function returns an array of objects with slugs, telling Next.js which pages to build statically.
Execution Table
StepActionData/ParamsResult
1Call generateStaticParamsNo inputFunction starts
2Return array of params[{ slug: 'post-1' }, { slug: 'post-2' }]Next.js receives params
3Next.js builds static pagesUses each slugPages /post-1 and /post-2 generated
4Serve pagesUser requests /post-1 or /post-2Page served instantly from static files
💡 All static paths generated; no more params to process
Variable Tracker
VariableStartAfter ReturnFinal
paramsundefined[{ slug: 'post-1' }, { slug: 'post-2' }][{ slug: 'post-1' }, { slug: 'post-2' }]
Key Moments - 2 Insights
Why do we return an array of objects from generateStaticParams?
Because Next.js needs a list of all dynamic route parameters to pre-build each page at build time, as shown in execution_table step 2.
What happens if generateStaticParams returns an empty array?
No static pages for dynamic routes are generated, so those pages won't exist unless fallback is used, as implied by the absence of params in execution_table.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what does generateStaticParams return at step 2?
AA single object {slug:'post-1'}
BAn empty array []
C[{ slug: 'post-1' }, { slug: 'post-2' }]
DUndefined
💡 Hint
Check the 'Data/Params' column at step 2 in execution_table
At which step does Next.js build the static pages?
AStep 3
BStep 1
CStep 2
DStep 4
💡 Hint
Look at the 'Action' column describing building pages in execution_table
If we add {slug:'post-3'} to the returned array, what changes in the execution_table?
AStep 4 serves post-3 page only
BStep 2 data includes post-3 and Step 3 builds /post-3 page
CNo change, only post-1 and post-2 are built
DFunction fails to return
💡 Hint
Adding params affects the returned array and pages built as shown in steps 2 and 3
Concept Snapshot
generateStaticParams is an async function
Returns array of params objects for dynamic routes
Next.js uses these params to pre-build static pages
Pages are generated at build time for fast loading
No server needed to serve these pages
Useful for static site generation with dynamic paths
Full Transcript
The generateStaticParams function in Next.js is used to tell the framework which dynamic routes to pre-build as static pages. When called, it returns an array of objects, each representing parameters for a dynamic route, like slugs for blog posts. Next.js uses this list during the build process to generate static HTML pages for each route. This means when users visit these pages, they load instantly without server delays. If the array is empty, no static pages are generated for those routes. Adding more params adds more static pages. This process improves performance and SEO by serving pre-built pages.

Practice

(1/5)
1. What is the main purpose of generateStaticParams in Next.js?
easy
A. To tell Next.js which dynamic routes to pre-render at build time
B. To fetch data on every user request
C. To handle client-side navigation between pages
D. To define API routes in Next.js

Solution

  1. Step 1: Understand the role of generateStaticParams

    This function is used to specify dynamic route parameters for static generation.
  2. Step 2: Compare with other Next.js features

    Unlike client-side navigation or API routes, generateStaticParams runs at build time to pre-build pages.
  3. Final Answer:

    To tell Next.js which dynamic routes to pre-render at build time -> Option A
  4. Quick Check:

    generateStaticParams = pre-render dynamic routes [OK]
Hint: Remember: generateStaticParams runs at build time for static pages [OK]
Common Mistakes:
  • Confusing generateStaticParams with client-side data fetching
  • Thinking it runs on every request
  • Mixing it up with API route definitions
2. Which of the following is the correct syntax for generateStaticParams in a Next.js dynamic route file?
easy
A. export function generateStaticParams() { return ['1', '2']; }
B. export async function generateStaticParams() { return [{ id: '1' }, { id: '2' }]; }
C. export async function getStaticPaths() { return [{ params: { id: '1' } }]; }
D. export default function generateStaticParams() { return { paths: ['1', '2'] }; }

Solution

  1. Step 1: Recall the correct return format

    generateStaticParams returns an array of objects with route parameters as keys.
  2. Step 2: Check syntax correctness

    export async function generateStaticParams() { return [{ id: '1' }, { id: '2' }]; } correctly exports an async function returning [{ id: '1' }, { id: '2' }]. Others have wrong return types or use getStaticPaths.
  3. Final Answer:

    export async function generateStaticParams() { return [{ id: '1' }, { id: '2' }]; } -> Option B
  4. Quick Check:

    Return array of param objects = export async function generateStaticParams() { return [{ id: '1' }, { id: '2' }]; } [OK]
Hint: generateStaticParams returns array of objects with params keys [OK]
Common Mistakes:
  • Using getStaticPaths instead of generateStaticParams
  • Returning array of strings instead of objects
  • Not exporting the function properly
3. Given this generateStaticParams function, what static paths will Next.js generate?
export async function generateStaticParams() {
  return [
    { slug: 'home' },
    { slug: 'about' },
    { slug: 'contact' }
  ];
}
medium
A. /home, /about, /contact
B. /slug/home, /slug/about, /slug/contact
C. /, /about, /contact
D. /home, /about, /contact, /blog

Solution

  1. Step 1: Understand the returned params

    The function returns an array with slug keys: 'home', 'about', 'contact'.
  2. Step 2: Map params to URLs

    Next.js uses these slugs as dynamic route parts, so paths are /home, /about, /contact.
  3. Final Answer:

    /home, /about, /contact -> Option A
  4. Quick Check:

    Params slug values = generated paths [OK]
Hint: Params keys map directly to URL segments in static paths [OK]
Common Mistakes:
  • Adding extra path segments like /slug/
  • Assuming root path / is included automatically
  • Including paths not returned by generateStaticParams
4. Identify the error in this generateStaticParams function:
export async function generateStaticParams() {
  return [
    { id: 1 },
    { id: 2 },
    { id: 3 }
  ]
}
medium
A. There is no error; this is correct syntax
B. The function must return an object, not an array
C. The function must be named getStaticPaths instead
D. The id values should be strings, not numbers

Solution

  1. Step 1: Check parameter types

    Route parameters in Next.js must be strings because URLs are strings.
  2. Step 2: Identify type mismatch

    Here, id values are numbers (1, 2, 3), which can cause build errors or unexpected behavior.
  3. Final Answer:

    The id values should be strings, not numbers -> Option D
  4. Quick Check:

    Route params must be strings [OK]
Hint: Always use strings for route parameters in generateStaticParams [OK]
Common Mistakes:
  • Returning numbers instead of strings for params
  • Confusing generateStaticParams with getStaticPaths
  • Returning object instead of array
5. You want to statically generate blog post pages with slugs from an API. Which generateStaticParams implementation correctly fetches slugs and returns them for static generation?
async function fetchSlugs() {
  return ['post-1', 'post-2', 'post-3'];
}
Choose the correct code:
hard
A. export async function generateStaticParams() { const slugs = await fetchSlugs(); return slugs; }
B. export async function generateStaticParams() { const slugs = await fetchSlugs(); return { paths: slugs }; }
C. export async function generateStaticParams() { const slugs = await fetchSlugs(); return slugs.map(slug => ({ slug })); }
D. export async function generateStaticParams() { const slugs = await fetchSlugs(); return slugs.map(slug => ({ params: { slug } })); }

Solution

  1. Step 1: Understand expected return format

    generateStaticParams expects an array of objects with route params keys directly, e.g. [{ slug: 'post-1' }].
  2. Step 2: Analyze each option

    export async function generateStaticParams() { const slugs = await fetchSlugs(); return slugs.map(slug => ({ slug })); } returns slugs mapped to objects with slug keys correctly. export async function generateStaticParams() { const slugs = await fetchSlugs(); return { paths: slugs }; } returns an object, not array. export async function generateStaticParams() { const slugs = await fetchSlugs(); return slugs; } returns array of strings, not objects. export async function generateStaticParams() { const slugs = await fetchSlugs(); return slugs.map(slug => ({ params: { slug } })); } adds extra params key, which is incorrect for generateStaticParams.
  3. Final Answer:

    export async function generateStaticParams() { const slugs = await fetchSlugs(); return slugs.map(slug => ({ slug })); } -> Option C
  4. Quick Check:

    Return array of param objects without extra nesting [OK]
Hint: Map slugs to objects with keys matching route params [OK]
Common Mistakes:
  • Returning object with paths key instead of array
  • Returning array of strings instead of objects
  • Adding extra nesting like { params: { slug } }