- 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
// ...
}