透過超過 100 個小技巧學習 Nuxt!

usePreviewMode

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

usePreviewMode

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

您可以使用內建的 usePreviewMode 組合式函式來存取和控制 Nuxt 中的預覽狀態。如果此組合式函式偵測到預覽模式,它將自動強制 useAsyncDatauseFetch 進行任何必要的更新,以重新渲染預覽內容。

const { enabled, state } = usePreviewMode()

選項

自訂 enable 檢查

您可以指定自訂方式來啟用預覽模式。預設情況下,如果 URL 中存在等於 truepreview 參數(例如,https://127.0.0.1:3000?preview=true),則 usePreviewMode 組合式函式將啟用預覽模式。您可以將 usePreviewMode 包裝到自訂的組合式函式中,以保持跨使用的一致性並防止任何錯誤。

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() 以從伺服器重新獲取所有資料。

當預覽模式停用時,此組合式函式將附加一個回呼,以在後續的路由導航後呼叫 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 進行測試。(預覽命令與預覽模式無關。)