ライフサイクルフック
Nuxtは、フックを使用してほぼすべての側面を拡張できる強力なフックシステムを提供します。
フックシステムはunjs/hookableによって提供されています。
Nuxtフック(ビルド時)
これらのフックは、Nuxtモジュールとビルドコンテキストで使用できます。
nuxt.config
内
nuxt.config
export default defineNuxtConfig({
hooks: {
close: () => { }
}
})
Nuxtモジュール内
import { defineNuxtModule } from '@nuxt/kit'
export default defineNuxtModule({
setup (options, nuxt) {
nuxt.hook('close', async () => { })
}
})
アプリフック(ランタイム)
アプリフックは主にNuxtプラグインによってレンダリングライフサイクルにフックするために使用されますが、Vueコンポーザブルでも使用できます。
plugins/test.ts
export default defineNuxtPlugin((nuxtApp) => {
nuxtApp.hook('page:start', () => {
/* your code goes here */
})
})
サーバーフック(ランタイム)
これらのフックは、サーバープラグインがNitroのランタイム動作にフックするために使用できます。
~/server/plugins/test.ts
export default defineNitroPlugin((nitroApp) => {
nitroApp.hooks.hook('render:html', (html, { event }) => {
console.log('render:html', html)
html.bodyAppend.push('<hr>Appended by custom plugin')
})
nitroApp.hooks.hook('render:response', (response, { event }) => {
console.log('render:response', response)
})
})
追加のフック
Nuxtによって提供される型を拡張することにより、追加のフックを追加できます。これはモジュールに役立ちます。
import { HookResult } from "@nuxt/schema";
declare module '#app' {
interface RuntimeNuxtHooks {
'your-nuxt-runtime-hook': () => HookResult
}
interface NuxtHooks {
'your-nuxt-hook': () => HookResult
}
}
declare module 'nitropack' {
interface NitroRuntimeHooks {
'your-nitro-hook': () => void;
}
}