概要
Nuxt.jsのライフサイクルフックについて
自分の中で曖昧な部分が多々ありましたのでアウトプットしたいと思います。
ライフサイクルフックとは
一言で言うとWEBページを表示する手順のこと。
全部で10個のフックが存在し、各フックで行われることが異なる。
WEBページが表示される手順
1. serverMiddleware
__サーバーのみで実行されるフック__であり、__サーバー固有の処理__を記載したりする。
APIサーバーをserverMiddleware
を使って作成することもできる。
処理を書いたファイルをnuxt.config.js
のserverMiddleware
に登録するだけで使用できる。
2. nuxtServerInit
severMiddleware
と同様に__サーバーのみで実行されるフック__で
__クライアント側に処理を渡す前にサーバー側で行う処理__を記載する。
サーバーからクライアント側へ初期値を渡す処理や、クッキーの取得処理などを記載できる。
3. RouteMiddleware
__サーバーとクライアントの両方で実行されるフック__で
サーバーでは1回、クライアント側ではページ遷移のたびに呼び出される。
__ルーティング処理__などを記載する。
たとえば、認証していないユーザーはログインページにリダイレクトされるなど。
middleware
ディレクトリ内にファイルを作成し、nuxt.config.js
のmiddleware
に登録することで
処理を反映できる。
4. Validate
サーバーでSSR時に1回、クライアント側でページ遷移のたびに呼び出されるフック。
各コンポーネントで__バリデーション処理__を設定できる。
コンポーネント内のでvalidate
メソッドを定義することで使用できる。
5. asyncData
サーバーでSSR時に1回、クライアント側でページが読み込まれるたびに呼び出される。
__APIからデータを取得し、ローカルデータに格納するような処理__を行う。
コンポーネント内でasyncData
メソッドを定義して使用する。
6. beforeCreate
__Vueインスタンスが初期化されるときに呼び出される__フック。
注意点としてインスタンスは初期化されるが、this
を使ったようなデータにはアクセスできない。
7. created
Vueインスタンスが初期化され、データも初期化されたときに呼び出される。
ここで、beforeCreate
では使用できなかった、this
を使用したデータへのアクセスが可能になる。
なお、created
以降からthis
を使用してローカルのデータにアクセスできるようになる。
8. fetch
サーバー側でSSR時に1回、クライアント側でページ遷移ごと呼び出される。
__APIからデータを取得する処理__などを記載する。
備考: fetchとasyncDataの違い
asyncData | fetch |
---|---|
thisは使用できない | thisを使用できる |
pagesディレクトリ配下のファイルでのみ使用可 | すべてのコンポーネントファイルで使用可 |
9. beforeMount
__Vueインスタンスが実際のDOMにマウントされる前にクライアントでのみ呼び出される__フック。
ちなみに__マウント__とは、既存のDOMをVueインスタンスが生成するDOMで置き換えること。
10. mounted
__VueインスタンスがDOMにマウントされた後にクライアントで呼び出される__フック。
__DOMを操作する処理__を記載する。
DOMが生成された後なので、classやidを取得することができる。
参考文献
Nuxt.js公式ドキュメント
Vue.js公式ドキュメント
Nuxt.jsのライフサイクルフックを丁寧に解説してみた。