Detalles de getStaticProps
Aquí hay información esencial que deberías conocer sobre getStaticProps
.
Consultar API externa o base de datos
En lib/posts.js
, hemos implementado getSortedPostsData
que obtiene datos del sistema de archivos. Pero puedes obtener los datos de otras fuentes, como un endpoint de API externa, y funcionará perfectamente:
export async function getSortedPostsData() {
// En lugar del sistema de archivos,
// obtén datos de posts desde un endpoint de API externa
const res = await fetch('..');
return res.json();
}
Nota: Next.js incluye un polyfill para
fetch()
tanto en el cliente como en el servidor. No necesitas importarlo.
También puedes consultar directamente la base de datos:
import someDatabaseSDK from 'someDatabaseSDK'
const databaseClient = someDatabaseSDK.createClient(...)
export async function getSortedPostsData() {
// En lugar del sistema de archivos,
// obtén datos de posts desde una base de datos
return databaseClient.query('SELECT posts...')
}
Esto es posible porque 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. Esto significa que puedes escribir código como consultas directas a bases de datos sin que se envíen a los navegadores.
Desarrollo vs. Producción
- En desarrollo (
npm run dev
oyarn dev
),getStaticProps
se ejecuta en cada solicitud. - En producción,
getStaticProps
se ejecuta en tiempo de compilación. Sin embargo, este comportamiento puede mejorarse usando la clavefallback
devuelta porgetStaticPaths
.
Como está diseñado para ejecutarse en tiempo de compilación, no podrás usar datos que solo estén disponibles durante el tiempo de solicitud, como parámetros de consulta o encabezados HTTP.
Solo permitido en una página
getStaticProps
solo puede exportarse desde una página. No puedes exportarlo desde archivos que no sean páginas.
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.
¿Qué pasa si necesito obtener datos en tiempo de solicitud?
Dado que la Generación Estática ocurre una vez en tiempo de compilación, no es adecuada para datos que se actualizan con frecuencia o cambian en cada solicitud del usuario.
En casos como este, donde tus datos pueden cambiar, puedes usar Renderizado del lado del servidor (Server-side Rendering). Aprenderemos más sobre el renderizado del lado del servidor en la siguiente sección.