Capítulo 355 de 456
Função async exportada de uma página do Pages Router que busca dados em build time e retorna props para prerenderizar HTML estático.
getStaticProps: roda só no servidor, nunca no client; nunca entra no bundle do browser (permite queries diretas a banco de dados).next build; em background com fallback: true; antes do render inicial com fallback: blocking; em background com revalidate (ISR); on-demand com revalidate().getStaticProps, usado em navegações client-side via next/link/next/router (sem re-executar a função).pages/* (página), nunca em _app, _document, _error ou arquivos não-página; deve ser export standalone, não propriedade do componente.next dev.import type { InferGetStaticPropsType, GetStaticProps } from 'next'
type Repo = { name: string; stargazers_count: number }
export const getStaticProps = (async (context) => {
const res = await fetch('https://api.github.com/repos/vercel/next.js')
const repo = await res.json()
return { props: { repo } }
}) satisfies GetStaticProps<{ repo: Repo }>
export default function Page({
repo,
}: InferGetStaticPropsType<typeof getStaticProps>) {
return repo.stargazers_count
}
satisfies GetStaticProps e InferGetStaticPropsType para tipagem inferida.export async function loadPosts() {
const res = await fetch('https://.../posts/')
const data = await res.json()
return data
}
import { loadPosts } from '../lib/load-posts'
export async function getStaticProps() {
const posts = await loadPosts()
return { props: { posts } }
}
lib/ em vez de chamar a própria API route (evita round-trip extra).props: qualquer prop retornada é visível no HTML/JSON inicial no client, independente do método de rendering.getStaticProps: gera uma chamada de rede extra desnecessária; melhor extrair a lógica para lib/ e chamar direto.getStaticProps como propriedade do componente: só funciona como export standalone da página.pageProps no _app customizado: sem isso, props de getStaticProps chegam vazias na página.getStaticProps nunca vai para o bundle do client; pode fazer queries diretas a banco de dados com segurança.getStaticProps usa o JSON pré-computado, não re-executa a função.next-code-elimination.vercel.app valida o que é removido do bundle client.getStaticProps quando a página usa rota dinâmica.pageProps para a página funcionar.revalidate e revalidate() on-demand.