
- Next.js - Home
- Next.js - Overview
- Next.js - Project Setup
- Next.js - Folder Structure
- Next.js - App Router
- Next.js - Page Router
- Next.js Features
- Next.js - Pages
- Next.js - Data Fetching
- Next.js - ISR
- Next.js - Static File Serving
- Next.js - Pre-Rendering
- Next.js - Partial Pre Rendering
- Next.js - Server Side Rendering
- Next.js - Client Side Rendering
- Next.js Routing
- Next.js - Routing
- Next.js - Nested Routing
- Next.js - Dynamic Routing
- Next.js - Parallel Routing
- Next.js - Imperative Routing
- Next.js - Shallow Routing
- Next.js - Intercepting Routes
- Next.js - Redirecting Routes
- Next.js - Navigation and Linking
- Next.js Configuration
- Next.js - TypeScript
- Next.js - Environment Variables
- Next.js - File Conventions
- Next.js - ESLint
- Next.js API & Backend
- Next.js - API Routes
- Next.js - Dynamic API Routes
- Next.js - Route Handlers
- Next.js - API MiddleWares
- Next.js - Response Helpers
- Next.js API Reference
- Next.js - CLI Commands
- Next.js - Functions
- Next.js - Directives
- Next.js - Components
- Next.js - Image Component
- Next.js - Font Component
- Next.js - Head Component
- Next.js - Form Component
- Next.js - Link Component
- Next.js - Script Component
- Next.js Styling & SEO
- Next.js - CSS Support
- Next.js - Global CSS Support
- Next.js - Meta Data
- Next.js Advanced Topics
- Next.js - Error Handling
- Next.js - Server Actions
- Next.js - Fast Refresh
- Next.js - Internationalization
- Next.js - Authentication
- Next.js - Session Management
- Next.js - Authorization
- Next.js - Caching
- Next.js - Data Caching
- Next.js - Router Caching
- Next.js - Full Route Caching
- Next.js - Request Memoization
- Next.js Performance Optimization
- Next.js - Optimizations
- Next.js - Image Optimization
- Next.js - Lazy Loading
- Next.js - Font Optimization
- Next.js - Video Optimization
- Next.js - Script Optimization
- Next.js - Memory Optimization
- Next.js - Using OpenTelemetry
- Next.js - Package Bundling Optimization
- Next.js Testing
- Next.js - Testing
- Next.js - Testing with Jest
- Next.js - Testing with Cypress
- Next.js - Testing with Vitest
- Next.js - Testing with Playwright
- Next.js Debugging & Deployment
- Next.js - Debugging
- Next.js - Deployment
- Next.js Useful Resources
- Next.js - Interview Questions
- Next.js - Quick Guide
- Next.js - Useful Resources
- Next.js - Discussion
Next.js - generateStaticParams() Function
The generateStaticParams() Function
The Next.js generateStaticParams()
function used to statically generate routes at build time instead of on-demand at request time. This function is helpful, when you have a large number of dynamic routes that need to be pre-rendered and you want to optimize performance by generating them at build time.
Syntax
Following is the syntax of generateStaticParams()
function:
export async function generateStaticParams(options.params) { const posts = await fetch('link/to/api').then( (res) => res.json() ) return posts.map((post) => ({ slug: post.slug, })) }
Parameters
The generateStaticParams()
function takes 'options.params' as an optional parameter. The params object contains the populated params from the parent generateStaticParams, which can be used to generate the params in a child segment.
Return Value
The generateStaticParams()
function returns an array of objects, where each object represents the populated dynamic segments of a single route. Each property in the object is a dynamic segment to be filled in for the route. The properties name is the segment's name, and the properties value is what that segment should be filled in with.
Example Route | Return Type |
---|---|
/product/[id] | { id: string }[] |
/products/[category]/[product] | { category: string, product: string }[] |
/products/[...slug] | { slug: string[] }[] |
Example 1
In the example below, we have a single dynamic segment in the route /product/[id]. The generateStaticParams() function returns an array of objects, where each object represents the populated dynamic segments of a single route. In this case, the object contains the id of the product.
export function generateStaticParams() { return [{ id: '1' }, { id: '2' }, { id: '3' }] } // Three versions of this page will be statically generated // using the `params` returned by `generateStaticParams` // - /product/1 // - /product/2 // - /product/3 export default async function Page({ params, }: { params: Promise }) { const { id } = await params // ... }
Example 2
In the example below, we have multiple dynamic segments in the route /products/[category]/[product]. The generateStaticParams() function returns an array of objects, where each object represents the populated dynamic segments of a single route. In this case, the object contains the category and product of the product.
export function generateStaticParams() { return [ { category: 'a', product: '1' }, { category: 'b', product: '2' }, { category: 'c', product: '3' }, ] } // Three versions of this page will be statically generated // using the `params` returned by `generateStaticParams` // - /products/a/1 // - /products/b/2 // - /products/c/3 export default async function Page({ params, }: { params: Promise }) { const { category, product } = await params // ... }
Example 3
In the example below, we have a catch-all dynamic segment in the route /products/[...slug]. The generateStaticParams() function returns an array of objects, where each object represents the populated dynamic segments of a single route. In this case, the object contains the slug of the product.
export function generateStaticParams() { return [{ slug: ['a', '1'] }, { slug: ['b', '2'] }, { slug: ['c', '3'] }] } // Three versions of this page will be statically generated // using the `params` returned by `generateStaticParams` // - /product/a/1 // - /product/b/2 // - /product/c/3 export default async function Page({ params, }: { params: Promise }) { const { slug } = await params // ... }