draftMode
draftMode
是一個非同步函式,可讓您啟用和停用草稿模式,並檢查是否在伺服器元件中啟用草稿模式。
app/page.ts
import { draftMode } from 'next/headers'
export default async function Page() {
const { isEnabled } = await draftMode()
}
參考
以下方法和屬性可用
方法 | 描述 |
---|---|
isEnabled | 布林值,指示是否已啟用草稿模式。 |
enable() | 透過設定 Cookie (__prerender_bypass ) 在路由處理器中啟用草稿模式。 |
disable() | 透過刪除 Cookie 在路由處理器中停用草稿模式。 |
要知道
draftMode
是一個非同步函式,會回傳 Promise。您必須使用async/await
或 React 的use
函式。- 在版本 14 和更早版本中,
draftMode
是一個同步函式。為了協助向後相容性,您仍然可以在 Next.js 15 中同步存取它,但此行為在未來將會被棄用。
- 在版本 14 和更早版本中,
- 每次執行
next build
時,都會產生新的繞過 Cookie 值。這確保了繞過 Cookie 無法被猜測到。 - 若要透過 HTTP 在本機測試草稿模式,您的瀏覽器需要允許第三方 Cookie 和本機儲存空間存取。
範例
啟用草稿模式
若要啟用草稿模式,請建立新的路由處理器並呼叫 enable()
方法
app/draft/route.ts
import { draftMode } from 'next/headers'
export async function GET(request: Request) {
const draft = await draftMode()
draft.enable()
return new Response('Draft mode is enabled')
}
停用草稿模式
預設情況下,當瀏覽器關閉時,草稿模式工作階段就會結束。
若要手動停用草稿模式,請在您的路由處理器中呼叫 disable()
方法
app/draft/route.ts
import { draftMode } from 'next/headers'
export async function GET(request: Request) {
const draft = await draftMode()
draft.disable()
return new Response('Draft mode is disabled')
}
然後,傳送請求以調用路由處理器。如果使用<Link>
元件呼叫路由,您必須傳遞 prefetch={false}
以防止意外地在預先抓取時刪除 Cookie。
檢查草稿模式是否已啟用
您可以使用 isEnabled
屬性檢查是否在伺服器元件中啟用草稿模式
app/page.ts
import { draftMode } from 'next/headers'
export default async function Page() {
const { isEnabled } = await draftMode()
return (
<main>
<h1>My Blog Post</h1>
<p>Draft Mode is currently {isEnabled ? 'Enabled' : 'Disabled'}</p>
</main>
)
}
版本歷史
版本 | 變更 |
---|---|
v15.0.0-RC | draftMode 現在是非同步函式。提供程式碼模組 (codemod)。 |
v13.4.0 | 引入 draftMode 。 |
這有幫助嗎?