跳至内容

draftMode

draftMode 是一个**异步**函数,允许您启用和禁用草稿模式,以及在服务器组件中检查草稿模式是否已启用。

app/page.ts
import { draftMode } from 'next/headers'
 
export default async function Page() {
  const { isEnabled } = await draftMode()
}
app/page.js
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 中同步访问它,但此行为将在未来弃用。
  • 每次运行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>
  )
}
app/page.js
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-RCdraftMode 现在是一个异步函数。提供了 代码修改
v13.4.0引入 draftMode