usePreviewMode
使用 usePreviewMode 在 Nuxt 中检查和控制预览模式
usePreviewMode
预览模式允许你在不向用户展示的情况下,查看更改在实时网站上的显示效果。
你可以使用内置的 usePreviewMode 合成函数来访问和控制 Nuxt 中的预览状态。如果该合成函数检测到预览模式,它将自动强制执行 useAsyncData 和 useFetch 所需的任何更新,以重新渲染预览内容。
const { enabled, state } = usePreviewMode()
选项
自定义 enable 检查
你可以指定自定义方式来启用预览模式。默认情况下,如果 URL 中存在等于 true 的 preview 参数(例如 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 函数会将返回的值附加到当前状态,因此请务必小心,以免意外覆盖重要的状态。自定义 onEnable 和 onDisable 回调
默认情况下,当 usePreviewMode 启用时,它会调用 refreshNuxtData() 来从服务器重新获取所有数据。
当禁用预览模式时,该合成函数将添加一个回调,以便在随后的路由导航后调用 refreshNuxtData()。
你可以通过为 onEnable 和 onDisable 选项提供自己的函数,来指定触发的自定义回调。
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。