Configuración de Segmento de Ruta
Las opciones descritas en esta página se deshabilitan si la bandera
dynamicIOestá activa, y eventualmente serán obsoletas en el futuro.
Las opciones de Segmento de Ruta permiten configurar el comportamiento de una Página, Layout o Manejador de Ruta exportando directamente las siguientes variables:
| Opción | Tipo | Por defecto |
|---|---|---|
experimental_ppr | boolean | |
dynamic | 'auto' | 'force-dynamic' | 'error' | 'force-static' | 'auto' |
dynamicParams | boolean | true |
revalidate | false | 0 | number | false |
fetchCache | 'auto' | 'default-cache' | 'only-cache' | 'force-cache' | 'force-no-store' | 'default-no-store' | 'only-no-store' | 'auto' |
runtime | 'nodejs' | 'edge' | 'nodejs' |
preferredRegion | 'auto' | 'global' | 'home' | string | string[] | 'auto' |
maxDuration | number | Definido por plataforma de despliegue |
Opciones
experimental_ppr
Habilita el Renderizado Parcial (PPR) para un layout o página.
export const experimental_ppr = true
// true | falseexport const experimental_ppr = true
// true | falsedynamic
Cambia el comportamiento dinámico de un layout o página a completamente estático o completamente dinámico.
export const dynamic = 'auto'
// 'auto' | 'force-dynamic' | 'error' | 'force-static'export const dynamic = 'auto'
// 'auto' | 'force-dynamic' | 'error' | 'force-static'Importante: El nuevo modelo en el directorio
appfavorece el control granular del almacenamiento en caché a nivel de solicitudfetchsobre el modelo binario de todo o nada degetServerSidePropsygetStaticPropsa nivel de página en el directoriopages. La opcióndynamices una forma de volver al modelo anterior como conveniencia y proporciona una ruta de migración más simple.
'auto'(por defecto): La opción predeterminada para almacenar en caché tanto como sea posible sin impedir que ningún componente opte por un comportamiento dinámico.'force-dynamic': Fuerza el renderizado dinámico, lo que hará que las rutas se rendericen para cada usuario en el momento de la solicitud. Esta opción es equivalente a:- Establecer la opción de cada solicitud
fetch()en un layout o página a{ cache: 'no-store', next: { revalidate: 0 } }. - Establecer la configuración del segmento a
export const fetchCache = 'force-no-store'
- Establecer la opción de cada solicitud
'error': Fuerza el renderizado estático y almacena en caché los datos de un layout o página causando un error si algún componente usa APIs Dinámicas o datos no almacenados en caché. Esta opción es equivalente a:getStaticProps()en el directoriopages.- Establecer la opción de cada solicitud
fetch()en un layout o página a{ cache: 'force-cache' }. - Establecer la configuración del segmento a
fetchCache = 'only-cache', dynamicParams = false. dynamic = 'error'cambia el valor predeterminado dedynamicParamsdetrueafalse. Puede optar por volver a renderizar páginas dinámicamente para parámetros no generados porgenerateStaticParamsestableciendo manualmentedynamicParams = true.
'force-static': Fuerza el renderizado estático y almacena en caché los datos de un layout o página forzando acookies,headers()yuseSearchParams()a devolver valores vacíos. Es posible usarrevalidate,revalidatePathorevalidateTagen páginas o layouts renderizados conforce-static.
Importante:
- Las instrucciones sobre cómo migrar desde
getServerSidePropsygetStaticPropsadynamic: 'force-dynamic'ydynamic: 'error'se pueden encontrar en la guía de actualización.
dynamicParams
Controla qué sucede cuando se visita un segmento dinámico que no fue generado con generateStaticParams.
export const dynamicParams = true // true | false,export const dynamicParams = true // true | false,true(por defecto): Los segmentos dinámicos no incluidos engenerateStaticParamsse generan bajo demanda.false: Los segmentos dinámicos no incluidos engenerateStaticParamsdevolverán un 404.
Importante:
- Esta opción reemplaza la opción
fallback: true | false | blockingdegetStaticPathsen el directoriopages.- Para renderizar estáticamente todas las rutas la primera vez que se visitan, deberá devolver un array vacío en
generateStaticParamso utilizarexport const dynamic = 'force-static'.- Cuando
dynamicParams = true, el segmento utiliza Renderizado de Servidor con Streaming.
revalidate
Establece el tiempo de revalidación predeterminado para un layout o página. Esta opción no anula el valor revalidate establecido por solicitudes fetch individuales.
export const revalidate = false
// false | 0 | numberexport const revalidate = false
// false | 0 | numberfalse(por defecto): La heurística predeterminada para almacenar en caché cualquier solicitudfetchque establezca su opcióncacheen'force-cache'o que se descubra antes de usar una API Dinámica. Semánticamente equivalente arevalidate: Infinity, lo que significa que el recurso debe almacenarse en caché indefinidamente. Aún es posible que solicitudesfetchindividuales usencache: 'no-store'orevalidate: 0para evitar el almacenamiento en caché y hacer que la ruta se renderice dinámicamente. O establecerrevalidateen un número positivo menor que el valor predeterminado de la ruta para aumentar la frecuencia de revalidación.0: Asegura que un layout o página siempre se renderice dinámicamente incluso si no se descubren APIs Dinámicas o solicitudes de datos no almacenadas en caché. Esta opción cambia el valor predeterminado de las solicitudesfetchque no establecen una opcióncachea'no-store', pero deja las solicitudesfetchque optan por'force-cache'o usan unrevalidatepositivo como están.number: (en segundos) Establece la frecuencia de revalidación predeterminada de un layout o página ansegundos.
Importante:
- El valor de revalidación debe ser estáticamente analizable. Por ejemplo,
revalidate = 600es válido, perorevalidate = 60 * 10no lo es.- El valor de revalidación no está disponible cuando se usa
runtime = 'edge'.- En Desarrollo, las páginas siempre se renderizan bajo demanda y nunca se almacenan en caché. Esto permite ver los cambios inmediatamente sin esperar a que pase un período de revalidación.
Frecuencia de Revalidación
- El valor más bajo de
revalidateen cada layout y página de una sola ruta determinará la frecuencia de revalidación de toda la ruta. Esto asegura que las páginas secundarias se revaliden con la misma frecuencia que sus layouts principales. - Las solicitudes
fetchindividuales pueden establecer unrevalidatemás bajo que el valor predeterminado de la ruta para aumentar la frecuencia de revalidación de toda la ruta. Esto permite optar dinámicamente por una revalidación más frecuente para ciertas rutas según algunos criterios.
fetchCache
Esta es una opción avanzada que solo debe usarse si necesita anular específicamente el comportamiento predeterminado.
Por defecto, Next.js almacenará en caché cualquier solicitud fetch() que sea accesible antes de usar cualquier API Dinámica y no almacenará en caché las solicitudes fetch que se descubran después de usar APIs Dinámicas.
fetchCache permite anular la opción cache predeterminada de todas las solicitudes fetch en un layout o página.
export const fetchCache = 'auto'
// 'auto' | 'default-cache' | 'only-cache'
// 'force-cache' | 'force-no-store' | 'default-no-store' | 'only-no-store'export const fetchCache = 'auto'
// 'auto' | 'default-cache' | 'only-cache'
// 'force-cache' | 'force-no-store' | 'default-no-store' | 'only-no-store''auto'(por defecto): La opción predeterminada para almacenar en caché solicitudesfetchantes de las APIs Dinámicas con la opcióncacheque proporcionan y no almacenar en caché solicitudesfetchdespués de las APIs Dinámicas.'default-cache': Permite pasar cualquier opcióncacheafetch, pero si no se proporciona ninguna opción, establece la opcióncacheen'force-cache'. Esto significa que incluso las solicitudesfetchdespués de las APIs Dinámicas se consideran estáticas.'only-cache': Asegura que todas las solicitudesfetchopten por el almacenamiento en caché cambiando el valor predeterminado acache: 'force-cache'si no se proporciona ninguna opción y causando un error si alguna solicitudfetchusacache: 'no-store'.'force-cache': Asegura que todas las solicitudesfetchopten por el almacenamiento en caché estableciendo la opcióncachede todas las solicitudesfetchen'force-cache'.'default-no-store': Permite pasar cualquier opcióncacheafetch, pero si no se proporciona ninguna opción, establece la opcióncacheen'no-store'. Esto significa que incluso las solicitudesfetchantes de las APIs Dinámicas se consideran dinámicas.'only-no-store': Asegura que todas las solicitudesfetchopten por no almacenar en caché cambiando el valor predeterminado acache: 'no-store'si no se proporciona ninguna opción y causando un error si alguna solicitudfetchusacache: 'force-cache'.'force-no-store': Asegura que todas las solicitudesfetchopten por no almacenar en caché estableciendo la opcióncachede todas las solicitudesfetchen'no-store'. Esto fuerza a que todas las solicitudesfetchse vuelvan a obtener en cada solicitud, incluso si proporcionan una opción'force-cache'.
Comportamiento entre segmentos de ruta
- Cualquier opción establecida en cada layout y página de una sola ruta debe ser compatible entre sí.
- Si se proporcionan tanto
'only-cache'como'force-cache', entonces'force-cache'prevalece. Si se proporcionan tanto'only-no-store'como'force-no-store', entonces'force-no-store'prevalece. La opciónforcecambia el comportamiento en toda la ruta, por lo que un solo segmento con'force-*'evitaría cualquier error causado por'only-*'. - La intención de las opciones
'only-*'y'force-*'es garantizar que toda la ruta sea completamente estática o completamente dinámica. Esto significa:- No se permite una combinación de
'only-cache'y'only-no-store'en una sola ruta. - No se permite una combinación de
'force-cache'y'force-no-store'en una sola ruta.
- No se permite una combinación de
- Un padre no puede proporcionar
'default-no-store'si un hijo proporciona'auto'o'*-cache', ya que eso podría hacer que la misma solicitudfetchtenga un comportamiento diferente.
- Si se proporcionan tanto
- Generalmente se recomienda dejar los layouts padres compartidos como
'auto'y personalizar las opciones donde los segmentos hijos divergen.
runtime
Recomendamos usar el runtime de Node.js para renderizar su aplicación y el runtime Edge para Middleware.
export const runtime = 'nodejs'
// 'nodejs' | 'edge'export const runtime = 'nodejs'
// 'nodejs' | 'edge''nodejs'(por defecto)'edge'
preferredRegion
export const preferredRegion = 'auto'
// 'auto' | 'global' | 'home' | ['iad1', 'sfo1']export const preferredRegion = 'auto'
// 'auto' | 'global' | 'home' | ['iad1', 'sfo1']El soporte para preferredRegion y las regiones admitidas depende de su plataforma de despliegue.
Importante:
- Si no se especifica un
preferredRegion, heredará la opción del layout padre más cercano.- El layout raíz tiene como valor predeterminado todas las regiones.
maxDuration
Por defecto, Next.js no limita la ejecución de lógica del lado del servidor (renderizar una página o manejar una API).
Las plataformas de despliegue pueden usar maxDuration de la salida de compilación de Next.js para agregar límites de ejecución específicos.
Nota: Esta configuración requiere Next.js 13.4.10 o superior.
export const maxDuration = 5export const maxDuration = 5Importante:
- Si usa Acciones de Servidor, establezca
maxDurationa nivel de página para cambiar el tiempo de espera predeterminado de todas las Acciones de Servidor usadas en la página.
generateStaticParams
La función generateStaticParams se puede usar en combinación con segmentos de ruta dinámicos para definir la lista de parámetros de segmento de ruta que se generarán estáticamente en el momento de compilación en lugar de bajo demanda en el momento de la solicitud.
Consulte la referencia de API para más detalles.
Historial de Versiones
| Versión | |
|---|---|
v15.0.0-RC | export const runtime = "experimental-edge" obsoleto. Hay disponible un codemod. |