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.
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
:
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.
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 decallOnce
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ãonavigation
: Executa uma vez durante a renderização inicial e uma vez por cada navegação subsequente no lado do cliente
※Esta página é uma tradução não oficial da documentação oficial do Nuxt.js.
A página correspondente na documentação oficial está aqui:
https://nuxt.com/docs/3.x/api/utils/call-once