nuxt logo

Tradução da Documentação (Não Oficial)

callOnce

Execute uma função ou bloco de código uma vez durante SSR ou CSR.

Esta utilidade está disponível desde Nuxt v3.9.

Propósito

A função callOnce é projetada para executar uma função ou bloco de código apenas uma vez durante:

  • renderização no lado do servidor, mas não na hidratação
  • navegação no lado do cliente

Isso é útil para código que deve ser executado apenas uma vez, como registrar um evento ou configurar um estado global.

Uso

O modo padrão de callOnce é executar o código apenas uma vez. Por exemplo, se o código for executado no servidor, ele não será executado novamente no cliente. Também não será executado novamente se você chamar callOnce mais de uma vez no cliente, por exemplo, navegando de volta para esta página.

app.vue
const websiteConfig = useState('config')

await callOnce(async () => {
  console.log('Isso será registrado apenas uma vez')
  websiteConfig.value = await $fetch('https://my-cms.com/api/website-config')
})

Também é possível executar em cada navegação, evitando ainda a carga dupla inicial do servidor/cliente. Para isso, é possível usar o modo navigation:

app.vue
const websiteConfig = useState('config')

await callOnce(async () => {
  console.log('Isso será registrado apenas uma vez e depois em cada navegação no lado do cliente')
  websiteConfig.value = await $fetch('https://my-cms.com/api/website-config')
}, { mode: 'navigation' })

O modo navigation está disponível desde Nuxt v3.15.

callOnce é útil em combinação com o módulo Pinia para chamar ações de store.

Veja também getting-started > state-management

Note que callOnce não retorna nada. Você deve usar useAsyncData ou useFetch se quiser buscar dados durante SSR.

callOnce é um composable destinado a ser chamado diretamente em uma função de setup, plugin ou middleware de rota, porque precisa adicionar dados ao payload do Nuxt para evitar chamar novamente a função no cliente quando a página é hidratada.

Tipo

callOnce (key?: string, fn?: (() => any | Promise<any>), options?: CallOnceOptions): Promise<void>
callOnce(fn?: (() => any | Promise<any>), options?: CallOnceOptions): Promise<void>

type CallOnceOptions = {
  /**
   * Modo de execução para a função callOnce
   * @default 'render'
   */
  mode?: 'navigation' | 'render'
}

Parâmetros

  • key: Uma chave única garantindo que o código seja executado uma vez. Se você não fornecer uma chave, uma chave única para o arquivo e número de linha da instância de callOnce será gerada para você.
  • fn: A função a ser executada uma vez. Pode ser assíncrona.
  • options: Configura o modo, seja para reexecutar na navegação (navigation) ou apenas uma vez durante a vida útil do aplicativo (render). O padrão é render.
    • render: Executa uma vez durante a renderização inicial (seja SSR ou CSR) - Modo padrão
    • navigation: Executa uma vez durante a renderização inicial e uma vez por cada navegação subsequente no lado do cliente