3 回答

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超18個(gè)贊
首先,函數(shù)的參數(shù),getStaticProps
即context
對(duì)象沒有任何名為的屬性res
。所以res.statusCode = 404;
這里什么也不做。
并且getStaticProps
意味著用于靜態(tài)站點(diǎn)生成,另外對(duì)于動(dòng)態(tài)路由,您可以導(dǎo)出另一個(gè)函數(shù)getStaticPaths
,該函數(shù)應(yīng)該生成并返回具有動(dòng)態(tài)路由參數(shù)的路徑數(shù)組,getStaticProps
將在構(gòu)建時(shí)調(diào)用這些路徑參數(shù)以預(yù)渲染頁(yè)面。
在開發(fā)模式下,將根據(jù)請(qǐng)求調(diào)用數(shù)據(jù)獲取方法,以便您的代碼正常工作。但在生產(chǎn)模式下,它將顯示預(yù)渲染的靜態(tài)頁(yè)面,這意味著頁(yè)面將顯示渲染時(shí)的內(nèi)容,如果您編輯和更新內(nèi)容,它將不會(huì)反映在頁(yè)面上。
如果您決定使用靜態(tài)站點(diǎn)生成,則必須在更新博客后重建整個(gè)站點(diǎn),或者您必須具有某種客戶端 data-fetching
邏輯,以便在更新博客內(nèi)容時(shí)更新博客。
對(duì)于客戶端數(shù)據(jù)獲取,您可以使用類似swr或react-query
這是一些可能有助于預(yù)渲染頁(yè)面的偽代碼,
路線/article/[articleId]
export async function getStaticPaths() {
const articles = await /* db query to get the list of articles or fetch from remote API*/
// generate a list of paths with route params
const paths = articles.map(article => ({ params: { articleId: article.id }}))
return {
paths,
fallback: false
// fallback can be true if you want to show a fallback version of page
// and serve JSON for unknown articles
}
}
export async function getStaticProps(ctx) {
try {
const result = await fetch(`${API.baseURL}/get_article/${params.id}`);
const article = await result.json();
return {
props: { article },
};
} catch (error) {
return {
props: null
}
}
}
詳細(xì)了解函數(shù)docsfallback
的返回值是如何工作的。getStaticPaths
另一種選擇是getServerSideProps
用作數(shù)據(jù)獲取方法,該方法將在每次請(qǐng)求頁(yè)面時(shí)調(diào)用,但 TTFB(到第一個(gè)字節(jié)的時(shí)間)會(huì)更高。因此,對(duì)于博客發(fā)布網(wǎng)站,我不建議使用getServerSideProps
.

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊
您必須添加revalidate
參數(shù)。在這里了解更多信息。
在你的情況下
export async function getStaticProps({ params, res }) {
try {
const result = await fetch(`${API.baseURL}/get_article/${params.id}`);
const article = await result.json();
return {
props: { article },
revalidate: 10 // 10 seconds
};
} catch (error) {
res.statusCode = 404;
return { props: {} };
}
}
請(qǐng)注意該revalidate參數(shù)。

TA貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個(gè)贊
有一種方法可以更新使用 getStaticProps 生成的 HTML,這個(gè)過程稱為增量服務(wù)器重新生成。這將確保您在將更新推送到博客文章時(shí)更新您的頁(yè)面。NextJS 已經(jīng)記錄了這個(gè) https://nextjs.org/docs/basic-features/data-fetching 您在上面的頁(yè)面上搜索 ISR 以了解它是如何完成的 基本上您必須指定 NextJS 將嘗試更新頁(yè)面的時(shí)間,如果完全有新帖子,它將在第一次請(qǐng)求時(shí)由服務(wù)器呈現(xiàn),并且然后緩存,一旦緩存,它幾乎就像一個(gè)靜態(tài)頁(yè)面一樣工作,參考后備:'blocking' 從網(wǎng)站引用:Next.js 允許您在構(gòu)建網(wǎng)站后創(chuàng)建或更新靜態(tài)頁(yè)面。增量靜態(tài)重新生成 (ISR) 使您能夠在每個(gè)頁(yè)面的基礎(chǔ)上使用靜態(tài)生成,而無需重建整個(gè)站點(diǎn)。使用 ISR,您可以在擴(kuò)展到數(shù)百萬頁(yè)的同時(shí)保留靜態(tài)的優(yōu)勢(shì)。
考慮我們之前的 getStaticProps 示例,但現(xiàn)在通過 revalidate 屬性啟用增量靜態(tài)再生
添加回答
舉報(bào)