透過 100 多個技巧的集合來學習 Nuxt!

usePreviewMode

使用 usePreviewMode 來檢查和控制 Nuxt 中的預覽模式

usePreviewMode

預覽模式讓您在不向使用者公開變更的情況下,查看變更在即時網站上的顯示效果。

您可以使用內建的 usePreviewMode composable 來存取和控制 Nuxt 中的預覽狀態。如果 composable 偵測到預覽模式,它會自動強制 useAsyncDatauseFetch 重新渲染預覽內容所需的任何更新。

const { enabled, state } = usePreviewMode()

選項

自訂 enable 檢查

您可以指定自訂方式來啟用預覽模式。預設情況下,如果 URL 中有 preview 參數且值等於 true (例如,https://#:3000?preview=true),usePreviewMode composable 將會啟用預覽模式。您可以將 usePreviewMode 包裝到自訂 composable 中,以保持跨使用方式的選項一致性並防止任何錯誤。

export function useMyPreviewMode () {
  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() 以從伺服器重新擷取所有資料。

當預覽模式停用時,composable 會附加一個回呼,以便在後續的路由器導航後呼叫 refreshNuxtData() 執行。

您可以透過為 onEnableonDisable 選項提供您自己的函數,來指定要觸發的自訂回呼。

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

範例

以下範例建立一個頁面,其中部分內容僅在預覽模式下呈現。

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 nuxi generate
npx nuxi preview

然後,您可以透過將查詢參數 preview 新增到您想要查看一次的頁面結尾,來查看您的預覽頁面

?preview=true
usePreviewMode 應在本地使用 nuxi generate 然後 nuxi preview 而不是 nuxi dev 進行測試。(preview 命令 與預覽模式無關。)