nuxt logo

Traducción de Documentación (No Oficial)

callOnce

Ejecuta una función o bloque de código dado una vez durante SSR o CSR.

Esta utilidad está disponible desde Nuxt v3.9.

Propósito

La función callOnce está diseñada para ejecutar una función o bloque de código dado solo una vez durante:

  • renderizado del lado del servidor pero no durante la hidratación
  • navegación del lado del cliente

Esto es útil para código que debe ejecutarse solo una vez, como registrar un evento o configurar un estado global.

Uso

El modo predeterminado de callOnce es ejecutar el código solo una vez. Por ejemplo, si el código se ejecuta en el servidor, no se ejecutará nuevamente en el cliente. Tampoco se ejecutará de nuevo si llamas a callOnce más de una vez en el cliente, por ejemplo, al navegar de regreso a esta página.

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

await callOnce(async () => {
  console.log('Esto solo se registrará una vez')
  websiteConfig.value = await $fetch('https://my-cms.com/api/website-config')
})

También es posible ejecutar en cada navegación mientras se evita la doble carga inicial del servidor/cliente. Para esto, es posible usar el modo navigation:

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

await callOnce(async () => {
  console.log('Esto solo se registrará una vez y luego en cada navegación del lado del cliente')
  websiteConfig.value = await $fetch('https://my-cms.com/api/website-config')
}, { mode: 'navigation' })

El modo navigation está disponible desde Nuxt v3.15.

callOnce es útil en combinación con el módulo Pinia para llamar a acciones de la tienda.

Ver también getting-started > state-management

Ten en cuenta que callOnce no devuelve nada. Deberías usar useAsyncData o useFetch si deseas realizar una obtención de datos durante SSR.

callOnce es un composable destinado a ser llamado directamente en una función de configuración, plugin o middleware de ruta, porque necesita agregar datos al payload de Nuxt para evitar volver a llamar a la función en el cliente cuando la página se hidrata.

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 ejecución para la función callOnce
   * @default 'render'
   */
  mode?: 'navigation' | 'render'
}

Parámetros

  • key: Una clave única que asegura que el código se ejecute una vez. Si no proporcionas una clave, se generará una clave única para el archivo y el número de línea de la instancia de callOnce.
  • fn: La función a ejecutar una vez. Puede ser asíncrona.
  • options: Configura el modo, ya sea para re-ejecutar en la navegación (navigation) o solo una vez durante la vida útil de la aplicación (render). Por defecto es render.
    • render: Se ejecuta una vez durante el renderizado inicial (ya sea SSR o CSR) - Modo predeterminado
    • navigation: Se ejecuta una vez durante el renderizado inicial y una vez por cada navegación subsiguiente del lado del cliente