getStaticProps
getStaticProps adlı bir işlevin dışa aktarılması, işlevden döndürülen prop'ları kullanarak derleme zamanında bir sayfayı önceden oluşturacaktır:
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
}getStaticProps adresinde kullanmak üzere modülleri üst düzey kapsamda içe aktarabilirsiniz. Kullanılan içe aktarmalar istemci tarafı için paketlenmeyecektir. Bu, veritabanınızdan veri almak da dahil olmak üzere sunucu tarafı kodunu doğrudan getStaticProps adresinde yazabileceğiniz anlamına gelir.
Context parameter
context parametresi aşağıdaki anahtarları içeren bir nesnedir:
| Name | Description |
|---|---|
params | Contains the route parameters for pages using dynamic routes. For example, if the page name is [id].js, then params will look like { id: ... }. You should use this together with getStaticPaths, which we'll explain later. |
preview | (Deprecated for draftMode) preview is true if the page is in the Preview Mode and false otherwise. |
previewData | (Deprecated for draftMode) The preview data set by setPreviewData. |
draftMode | draftMode is true if the page is in the Draft Mode and false otherwise. |
locale | Contains the active locale (if enabled). |
locales | Contains all supported locales (if enabled). |
defaultLocale | Contains the configured default locale (if enabled). |
getStaticProps return values
getStaticProps işlevi, props, redirect veya notFound ve ardından isteğe bağlı bir revalidate özelliği içeren bir nesne döndürmelidir.
props
props nesnesi, her bir değerin sayfa bileşeni tarafından alındığı bir anahtar-değer çiftidir. Serileştirilebilir bir nesne olmalıdır böylece aktarılan herhangi bir sahne aşağıdakilerle serileştirilebilir JSON.stringify.
export async function getStaticProps(context) {
return {
props: { message: `Next.js is awesome` }, // will be passed to the page component as props
}
}revalidate
revalidate özelliği, sayfanın yeniden oluşturulabileceği saniye cinsinden miktardır (varsayılan değer false veya yeniden doğrulama yok).
// This function gets called at build time on server-side.
// It may be called again, on a serverless function, if
// revalidation is enabled and a new request comes in
export async function getStaticProps() {
const res = await fetch('https://.../posts')
const posts = await res.json()
return {
props: {
posts,
},
// Next.js will attempt to re-generate the page:
// - When a request comes in
// - At most once every 10 seconds
revalidate: 10, // In seconds
}
}Artımlı Statik Rejenerasyon hakkında daha fazla bilgi edinin.
ISR'den yararlanan bir sayfanın önbellek durumu x-nextjs-cache yanıt başlığının değeri okunarak belirlenebilir. Olası değerler şunlardır:
MISS- yol önbellekte değil (en fazla bir kez, ilk ziyarette gerçekleşir)STALE- yol önbellektedir ancak yeniden doğrulama süresini aşmıştır, bu nedenle arka planda güncellenecektirHIT- yol önbellektedir ve yeniden doğrulama süresini aşmamıştır
notFound
notFound boolean'ı sayfanın bir 404 durumu ve 404 Sayfası döndürmesini sağlar. notFound: true ile, daha önce başarıyla oluşturulmuş bir sayfa olsa bile sayfa bir 404 döndürür. Bu, kullanıcı tarafından oluşturulan içeriğin yazarı tarafından kaldırılması gibi kullanım durumlarını desteklemek içindir. Unutmayın, notFound burada açıklanan revalidate davranışının aynısını izler.
export async function getStaticProps(context) {
const res = await fetch(`https://.../data`)
const data = await res.json()
if (!data) {
return {
notFound: true,
}
}
return {
props: { data }, // will be passed to the page component as props
}
}Bilmekte fayda var:
notFoundiçin gerekli değildirfallback: falsemodunda yalnızcagetStaticPathsadresinden döndürülen yollar önceden işlenecektir.
redirect
redirect nesnesi dahili veya harici kaynaklara yönlendirmeye izin verir. { destination: string, permanent: boolean } şekliyle eşleşmelidir.
Bazı nadir durumlarda, eski HTTP istemcilerinin düzgün şekilde yönlendirilmesi için özel bir durum kodu atamanız gerekebilir. Bu durumlarda, permanent özelliği yerine statusCode özelliğini kullanabilirsiniz, ancak ikisini birden kullanamazsınız. Ayrıca basePath: false 'u next.config.js'daki yönlendirmelere benzer şekilde ayarlayabilirsiniz.
export async function getStaticProps(context) {
const res = await fetch(`https://...`)
const data = await res.json()
if (!data) {
return {
redirect: {
destination: '/',
permanent: false,
// statusCode: 301
},
}
}
return {
props: { data }, // will be passed to the page component as props
}
}Yönlendirmeler derleme zamanında biliniyorsa, bunlar next.config.js onun yerine.
Reading files: Use process.cwd()
Dosyalar getStaticProps adresindeki dosya sisteminden doğrudan okunabilir.
Bunu yapmak için bir dosyanın tam yolunu almanız gerekir.
Next.js kodunuzu ayrı bir dizinde derlediğinden, döndürdüğü yol Pages Router'dan farklı olacağından __dirname adresini kullanamazsınız.
Bunun yerine Next.js'nin çalıştırıldığı dizini veren process.cwd() adresini kullanabilirsiniz.
import { promises as fs } from 'fs'
import path from 'path'
// posts will be populated at build time by getStaticProps()
function Blog({ posts }) {
return (
<ul>
{posts.map((post) => (
<li>
<h3>{post.filename}</h3>
<p>{post.content}</p>
</li>
))}
</ul>
)
}
// This function gets called at build time on server-side.
// It won't be called on client-side, so you can even do
// direct database queries.
export async function getStaticProps() {
const postsDirectory = path.join(process.cwd(), 'posts')
const filenames = await fs.readdir(postsDirectory)
const posts = filenames.map(async (filename) => {
const filePath = path.join(postsDirectory, filename)
const fileContents = await fs.readFile(filePath, 'utf8')
// Generally you would parse/transform the contents
// For example you can transform markdown to HTML here
return {
filename,
content: fileContents,
}
})
// By returning { props: { posts } }, the Blog component
// will receive `posts` as a prop at build time
return {
props: {
posts: await Promise.all(posts),
},
}
}
export default BlogVersion History
| Version | Changes |
|---|---|
v13.4.0 | App Router is now stable with simplified data fetching |
v12.2.0 | On-Demand Incremental Static Regeneration is stable. |
v12.1.0 | On-Demand Incremental Static Regeneration added (beta). |
v10.0.0 | locale, locales, defaultLocale, and notFound options added. |
v10.0.0 | fallback: 'blocking' return option added. |
v9.5.0 | Stable Incremental Static Regeneration |
v9.3.0 | getStaticProps introduced. |