usePreviewMode

源文件
使用 usePreviewMode 在 Nuxt 中检查和控制预览模式

usePreviewMode

预览模式允许您查看更改在实时站点上的显示方式,而无需向用户显示。

您可以使用内置的 usePreviewMode 可组合函数来访问和控制 Nuxt 中的预览状态。如果可组合函数检测到预览模式,它将自动强制任何必要的更新,以便 useAsyncDatauseFetch 重新渲染预览内容。

const { enabled, state } = usePreviewMode()

选项

自定义 enable 检查

您可以指定启用预览模式的自定义方式。默认情况下,如果 URL 中有一个等于 truepreview 参数(例如,https://:3000?preview=true),usePreviewMode 可组合函数将启用预览模式。您可以将 usePreviewMode 包装到自定义可组合函数中,以保持跨用途选项的一致性并防止任何错误。

export function useMyPreviewMode () {
  const route = useRoute()
  return usePreviewMode({
    shouldEnable: () => {
      return !!route.query.customPreview
    },
  })
}

修改默认状态

usePreviewMode 将尝试将 URL 中 token 参数的值存储在状态中。您可以修改此状态,并且它将可用于所有 usePreviewMode 调用。

const data1 = ref('data1')

const { enabled, state } = usePreviewMode({
  getState: (currentState) => {
    return { data1, data2: 'data2' }
  },
})
getState 函数会将返回的值附加到当前状态,因此请注意不要意外覆盖重要状态。

自定义 onEnableonDisable 回调

默认情况下,当 usePreviewMode 启用时,它将调用 refreshNuxtData() 从服务器重新获取所有数据。

当预览模式禁用时,可组合函数将附加一个回调,在后续路由导航后调用 refreshNuxtData() 运行。

您可以通过为 onEnableonDisable 选项提供您自己的函数来指定要触发的自定义回调。

const { enabled, state } = usePreviewMode({
  onEnable: () => {
    console.log('preview mode has been enabled')
  },
  onDisable: () => {
    console.log('preview mode has been disabled')
  },
})

示例

以下示例创建一个页面,其中部分内容仅在预览模式下渲染。

app/pages/some-page.vue
<script setup>
const { enabled, state } = usePreviewMode()

const { data } = await useFetch('/api/preview', {
  query: {
    apiKey: state.token,
  },
})
</script>

<template>
  <div>
    Some base content
    <p v-if="enabled">
      Only preview content: {{ state.token }}
      <br>
      <button @click="enabled = false">
        disable preview mode
      </button>
    </p>
  </div>
</template>

现在您可以生成您的网站并提供服务

终端
npx nuxt generate
npx nuxt preview

然后,您可以通过在要查看的页面末尾添加查询参数 preview 来查看您的预览页面,例如 https://:3000/?preview=true

usePreviewMode 应该在本地使用 nuxt generatenuxt preview 进行测试,而不是 nuxt dev。(预览命令与预览模式无关。)