ライフサイクルフック
Nuxtは、フックを使用してほぼすべての側面を拡張するための強力なフックシステムを提供します。
フックシステムは unjs/hookable によって提供されています。
Nuxtフック(ビルド時)
これらのフックは、Nuxtモジュールおよびビルドコンテキストで利用可能です。
nuxt.config.ts
内で
nuxt.config.ts
export default defineNuxtConfig({
hooks: {
close: () => { }
}
})
Nuxtモジュール内で
import { defineNuxtModule } from '@nuxt/kit'
export default defineNuxtModule({
setup (options, nuxt) {
nuxt.hook('close', async () => { })
}
})
こちらも参照 api > advanced > hooks#nuxt-hooks-build-time
アプリフック(ランタイム)
アプリフックは主にNuxtプラグインによってレンダリングライフサイクルにフックするために使用されますが、Vueのコンポーザブルでも使用できます。
app/plugins/test.ts
export default defineNuxtPlugin((nuxtApp) => {
nuxtApp.hook('page:start', () => {
/* ここにコードを記述 */
})
})
サーバーフック(ランタイム)
これらのフックは、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>カスタムプラグインによって追加されました')
})
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/types' {
interface NitroRuntimeHooks {
'your-nitro-hook': () => void;
}
}
※このページは Nuxt.js 公式ドキュメントの翻訳ページ(非公式)です。
公式ドキュメントの該当ページはこちら:
https://nuxt.com/docs/4.x/guide/going-further/hooks