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

callOnce

在 SSR 或 CSR 期間執行一次指定的函式或程式碼區塊。
此工具自 Nuxt v3.9 起可用。

目的

callOnce 函式旨在僅在以下情況下執行一次指定的函式或程式碼區塊:

  • 伺服器端渲染,但不包括 hydration
  • 客戶端導覽

這對於僅應執行一次的程式碼非常有用,例如記錄事件或設定全域狀態。

用法

app.vue
<script setup lang="ts">
const websiteConfig = useState('config')

await callOnce(async () => {
  console.log('This will only be logged once')
  websiteConfig.value = await $fetch('https://my-cms.com/api/website-config')
})
</script>
callOncePinia 模組結合使用來呼叫 store actions 非常有用。
請在 文件 > 入門 > 狀態管理 中閱讀更多資訊。
請注意,callOnce 不會傳回任何值。如果您想在 SSR 期間執行資料擷取,您應該使用 useAsyncDatauseFetch
callOnce 是一個 composable,旨在直接在設定函式、外掛程式或路由中介軟體中呼叫,因為它需要將資料新增至 Nuxt payload,以避免在頁面 hydration 時在客戶端重新呼叫函式。

類型

callOnce(fn?: () => any | Promise<any>): Promise<void>
callOnce(key: string, fn?: () => any | Promise<any>): Promise<void>
  • key:一個獨特的鍵,確保程式碼僅執行一次。如果您未提供鍵,則會為您產生一個對 callOnce 實例的檔案和行號而言獨特的鍵。
  • fn:要執行一次的函式。此函式也可以傳回 Promise 和一個值。