getStaticProps
Si exportas una función llamada getStaticProps
(Generación de Sitios Estáticos) desde una página, Next.js pre-renderizará esta página en el momento de construcción usando las props devueltas por getStaticProps
.
Ten en cuenta que, independientemente del tipo de renderizado, cualquier
props
se pasará al componente de la página y podrá verse en el lado del cliente en el HTML inicial. Esto es para permitir que la página se hidrate correctamente. Asegúrate de no pasar ninguna información sensible que no deba estar disponible en el cliente a través deprops
.
La referencia de la API getStaticProps
cubre todos los parámetros y props que pueden usarse con getStaticProps
.
¿Cuándo debería usar getStaticProps?
Deberías usar getStaticProps
si:
- Los datos necesarios para renderizar la página están disponibles en el momento de construcción, antes de la solicitud de un usuario
- Los datos provienen de un CMS headless
- La página debe ser pre-renderizada (para SEO) y ser muy rápida —
getStaticProps
genera archivosHTML
yJSON
, ambos pueden ser almacenados en caché por una CDN para mejorar el rendimiento - Los datos pueden ser almacenados en caché públicamente (no específicos del usuario). Esta condición puede omitirse en ciertas situaciones específicas usando un Middleware para reescribir la ruta.
Cuándo se ejecuta getStaticProps
getStaticProps
siempre se ejecuta en el servidor y nunca en el cliente. Puedes verificar que el código escrito dentro de getStaticProps
se elimina del paquete del lado del cliente con esta herramienta.
getStaticProps
siempre se ejecuta durantenext build
getStaticProps
se ejecuta en segundo plano cuando se usafallback: true
getStaticProps
se llama antes del renderizado inicial cuando se usafallback: blocking
getStaticProps
se ejecuta en segundo plano cuando se usarevalidate
getStaticProps
se ejecuta bajo demanda en segundo plano cuando se usarevalidate()
Cuando se combina con Regeneración Estática Incremental, getStaticProps
se ejecutará en segundo plano mientras la página obsoleta se está revalidando, y la página fresca se sirve al navegador.
getStaticProps
no tiene acceso a la solicitud entrante (como parámetros de consulta o cabeceras HTTP) ya que genera HTML estático. Si necesitas acceso a la solicitud para tu página, considera usar Middleware además de getStaticProps
.
Usando getStaticProps para obtener datos de un CMS
El siguiente ejemplo muestra cómo puedes obtener una lista de publicaciones de blog desde un CMS.
La referencia de la API getStaticProps
cubre todos los parámetros y props que pueden usarse con getStaticProps
.
Escribir código del lado del servidor directamente
Como getStaticProps
solo se ejecuta en el lado del servidor, nunca se ejecutará en el lado del cliente. Ni siquiera se incluirá en el paquete JS para el navegador, por lo que puedes escribir consultas directas a la base de datos sin que se envíen a los navegadores.
Esto significa que en lugar de obtener una ruta de API desde getStaticProps
(que a su vez obtiene datos de una fuente externa), puedes escribir el código del lado del servidor directamente en getStaticProps
.
Toma el siguiente ejemplo. Se usa una ruta de API para obtener algunos datos de un CMS. Luego, esa ruta de API se llama directamente desde getStaticProps
. Esto produce una llamada adicional, reduciendo el rendimiento. En su lugar, la lógica para obtener los datos del CMS puede compartirse usando un directorio lib/
. Luego puede compartirse con getStaticProps
.
Alternativamente, si no estás usando rutas API para obtener datos, entonces la API fetch()
puede usarse directamente en getStaticProps
para obtener datos.
Para verificar qué elimina Next.js del paquete del lado del cliente, puedes usar la herramienta next-code-elimination.
Genera estáticamente tanto HTML como JSON
Cuando una página con getStaticProps
es pre-renderizada en el momento de construcción, además del archivo HTML de la página, Next.js genera un archivo JSON que contiene el resultado de ejecutar getStaticProps
.
Este archivo JSON se usará en el enrutamiento del lado del cliente a través de next/link
o next/router
. Cuando navegas a una página que está pre-renderizada usando getStaticProps
, Next.js obtiene este archivo JSON (precalculado en el momento de construcción) y lo usa como props para el componente de la página. Esto significa que las transiciones de página del lado del cliente no llamarán a getStaticProps
, ya que solo se usa el JSON exportado.
Cuando se usa Regeneración Estática Incremental, getStaticProps
se ejecutará en segundo plano para generar el JSON necesario para la navegación del lado del cliente. Puedes ver esto en forma de múltiples solicitudes hechas para la misma página, sin embargo, esto es intencional y no afecta el rendimiento del usuario final.
Dónde puedo usar getStaticProps
getStaticProps
solo puede exportarse desde una página. No puedes exportarlo desde archivos que no sean páginas, _app
, _document
o _error
.
Una de las razones de esta restricción es que React necesita tener todos los datos requeridos antes de que la página se renderice.
Además, debes exportar getStaticProps
como una función independiente — no funcionará si añades getStaticProps
como una propiedad del componente de la página.
Nota importante: si has creado una aplicación personalizada, asegúrate de pasar las
pageProps
al componente de la página como se muestra en el documento enlazado, de lo contrario las props estarán vacías.
Se ejecuta en cada solicitud en desarrollo
En desarrollo (next dev
), getStaticProps
se llamará en cada solicitud.
Modo de Vista Previa
Puedes omitir temporalmente la generación estática y renderizar la página en tiempo de solicitud en lugar de tiempo de construcción usando el Modo de Vista Previa. Por ejemplo, podrías estar usando un CMS headless y querer previsualizar borradores antes de que se publiquen.
Obtención de Datos
Next.js permite obtener datos de múltiples formas, con prerenderizado, renderizado del lado del servidor (SSR) o generación de sitios estáticos, y regeneración estática incremental. Aprende a gestionar los datos de tu aplicación en Next.js.
getStaticPaths
Obtén datos y genera páginas estáticas con `getStaticPaths`. Conoce más sobre esta API para la obtención de datos en Next.js.