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.
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
:
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.
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 decallOnce
.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 esrender
.render
: Se ejecuta una vez durante el renderizado inicial (ya sea SSR o CSR) - Modo predeterminadonavigation
: Se ejecuta una vez durante el renderizado inicial y una vez por cada navegación subsiguiente del lado del cliente
※Esta página es una traducción no oficial de la documentación oficial de Nuxt.js.
La página correspondiente en la documentación oficial está aquí:
https://nuxt.com/docs/3.x/api/utils/call-once