generateStaticParams
La función generateStaticParams
puede usarse en combinación con segmentos de ruta dinámicos para generar estáticamente rutas en tiempo de compilación en lugar de bajo demanda en tiempo de solicitud.
Es bueno saberlo:
- Puedes usar la opción de configuración de segmento
dynamicParams
para controlar qué sucede cuando se visita un segmento dinámico que no fue generado congenerateStaticParams
.- Debes devolver un array vacío desde
generateStaticParams
o utilizarexport const dynamic = 'force-static'
para revalidar (ISR) rutas en tiempo de ejecución.- Durante
next dev
,generateStaticParams
se llamará cuando navegues a una ruta.- Durante
next build
,generateStaticParams
se ejecuta antes de que se generen los Layouts o Pages correspondientes.- Durante la revalidación (ISR),
generateStaticParams
no se volverá a llamar.generateStaticParams
reemplaza la funcióngetStaticPaths
en el Enrutador de Páginas.
Parámetros
options.params
(opcional)
Si múltiples segmentos dinámicos en una ruta usan generateStaticParams
, la función generateStaticParams
hija se ejecuta una vez por cada conjunto de params
que genera el padre.
El objeto params
contiene los params
poblados desde el generateStaticParams
padre, que pueden usarse para generar los params
en un segmento hijo.
Retorno
generateStaticParams
debe devolver un array de objetos donde cada objeto representa los segmentos dinámicos poblados de una sola ruta.
- Cada propiedad en el objeto es un segmento dinámico que se completará para la ruta.
- El nombre de la propiedad es el nombre del segmento, y el valor de la propiedad es con qué se debe completar ese segmento.
Ejemplo de Ruta | Tipo de Retorno de generateStaticParams |
---|---|
/product/[id] | { id: string }[] |
/products/[category]/[product] | { category: string, product: string }[] |
/products/[...slug] | { slug: string[] }[] |
Segmento Dinámico Único
Múltiples Segmentos Dinámicos
Segmento Dinámico Catch-all
Ejemplos
Renderizado Estático
Todas las rutas en tiempo de compilación
Para renderizar estáticamente todas las rutas en tiempo de compilación, proporciona la lista completa de rutas a generateStaticParams
:
Subconjunto de rutas en tiempo de compilación
Para renderizar estáticamente un subconjunto de rutas en tiempo de compilación, y el resto la primera vez que se visiten en tiempo de ejecución, devuelve una lista parcial de rutas:
Luego, usando la opción de configuración de segmento dynamicParams
, puedes controlar qué sucede cuando se visita un segmento dinámico que no fue generado con generateStaticParams
.
Todas las rutas en tiempo de ejecución
Para renderizar estáticamente todas las rutas la primera vez que se visiten, devuelve un array vacío (no se renderizarán rutas en tiempo de compilación) o utiliza export const dynamic = 'force-static'
:
Es bueno saberlo: Siempre debes devolver un array desde
generateStaticParams
, incluso si está vacío. De lo contrario, la ruta se renderizará dinámicamente.
Deshabilitar renderizado para rutas no especificadas
Para evitar que las rutas no especificadas se rendericen estáticamente en tiempo de ejecución, añade la opción export const dynamicParams = false
en un segmento de ruta. Cuando se usa esta configuración, solo se servirán las rutas proporcionadas por generateStaticParams
, y las rutas no especificadas devolverán 404 o coincidirán (en el caso de rutas catch-all).
Múltiples Segmentos Dinámicos en una Ruta
Puedes generar params para segmentos dinámicos por encima del layout o página actual, pero no por debajo. Por ejemplo, dada la ruta app/products/[category]/[product]
:
app/products/[category]/[product]/page.js
puede generar params para ambos[category]
y[product]
.app/products/[category]/layout.js
puede generar params solo para[category]
.
Hay dos enfoques para generar params para una ruta con múltiples segmentos dinámicos:
Generar params de abajo hacia arriba
Genera múltiples segmentos dinámicos desde el segmento de ruta hijo.
Generar params de arriba hacia abajo
Genera primero los segmentos padres y usa el resultado para generar los segmentos hijos.
La función generateStaticParams
de un segmento hijo se ejecuta una vez por cada segmento que genera un generateStaticParams
padre.
La función generateStaticParams
hija puede usar los params
devueltos desde la función generateStaticParams
padre para generar dinámicamente sus propios segmentos.
Es bueno saberlo: Las solicitudes
fetch
se memoizan automáticamente para los mismos datos en todas las funciones con prefijogenerate
, Layouts, Pages y Componentes de Servidor. Se puede usarcache
de React sifetch
no está disponible.
Historial de Versiones
Versión | Cambios |
---|---|
v13.0.0 | Se introdujo generateStaticParams . |