・Vue.jsのライフサイクルフックの使い方は?
こんな疑問にお答えします。
ライフサイクルフックは、Vueインスタンスの生成から破棄までの過程で特定のタイミングに実行されるメソッドのことです。
これを用いることで、「レンダリングされる直前に〇〇をしたい」などの実装ができちゃいます。
そのためかなり便利。
今回は自分用のメモとしてライフサイクルフックについてまとめてみました。
参考にどうぞ
ということで、この記事では「Vue.jsのライフサイクルフックの使い方」について解説していきます!
・Vue.jsのライフサイクルとは?
・Vue.jsのライフサイクルの図
・Vue.jsのライフサイクルフックの使い方
目次
【解説】Vue.jsのライフサイクルについて【Compsition API】
Vueのライフサイクルとは、インスタンスが生成〜破棄までの一連の流れのこと。
そしてライフサイクルフックとは、その一連の流れの特定のタイミングで実行されるメソッドを指します。
これにより特定タイミングで操作が可能になります。
主なライフサイクルフックを記述した図がこちら(※大まかな流れとなります)
↓
⓪ <script setup >が実行
↓
①「onBeforeMount」が実行
↓
ここでmountされる
↓
②「onMounted」が実行
ーーーーーーーーーーーーーーーー
再レンダリングされる場合
ーーーーーーーーーーーーーーーー
③「onBeforeUpdate」が実行
↓
ここで再レンダリング
↓
④「onUpdated」が実行
ーーーーーーーーーーーーーーーー
unmountされる場合
ーーーーーーーーーーーーーーーー
⑤「onBeforeUnmount」が実行
↓
ここでunmountされる
↓
⑥「onUnmounted」が実行
主にこのタイミングでライフサイクルフックが存在します。
【解説】Vue.jsのライフサイクルフックの使い方【Compsition API】
先述した図のライフサイクルフックがこちら↓
①:「onBeforeMount」
②:「onMounted」
③:「onBeforeUpdate」
④:「onUpdated」
⑤:「onBeforeUnmount」
⑥:「onUnmounted」
順に見ていきましょう。
「onBeforeMount」はマウントされる直前に実行されるライフサイクルフックのこと。
ちなみにマウントは、VueコンポーネントがDOMに挿入され、画面に表示されるプロセスです。
ようはコンポーネントが画面に表示される直前ですね。
import { onBeforeMount } from 'vue';
onBeforeMount(() => {
console.log('onBeforeMount')
})
「onMounted」はマウントされた直後に実行されるライフサイクルフックのこと。
ようはコンポーネントが画面に表示された直後ですね。
import { onMounted } from 'vue';
onMounted(() => {
console.log('onMounted')
})
「onBeforeUpdate」は再レンダリングが行われる直前に実行されるライフサイクルフックのこと。
例えばクリックしたら数値(count)が増えるボタンがあったとします。
<script setup lang="ts">
import { ref } from 'vue';
const count = ref(0);
</script>
<template>
<p>{{ count }}</p>
<button @click="count++">ボタン</button>
</template>
この場合、ユーザーがボタンをクリックして数値が増える直前のタイミングになりますね。
import { onBeforeUpdate } from 'vue';
onBeforeUpdate(() => {
console.log('onBeforeUpdate')
})
「onUpdated」は再レンダリングが完了した直後に実行されるライフサイクルフックのこと。
例えばクリックしたら数値(count)が増えるボタンがあったとします。
<script setup lang="ts">
import { ref } from 'vue';
const count = ref(0);
</script>
<template>
<p>{{ count }}</p>
<button @click="count++">ボタン</button>
</template>
この場合、ユーザーがボタンをクリックして数値が増えて再描画された直後になりますね。
import { onUpdated } from 'vue';
onUpdated(() => {
console.log('onUpdated')
})
「onBeforeUnmount」はアンマウントされる直前に実行されるライフサイクルフックのこと。
ちなみにアンマウントは、VueコンポーネントがDOMから削除され、画面から取り除かれるプロセスです。
ようはコンポーネントが削除される直前ですね。
import { onBeforeUnmount } from 'vue';
onBeforeUnmount(() => {
console.log('onBeforeUnmount')
})
「onUnmounted」はアンマウントされた直後に実行されるライフサイクルフックのこと。
ようはコンポーネントが削除される直後ですね。
import { onUnmounted } from 'vue';
onUnmounted(() => {
console.log('onUnmounted')
})
【解説】Vue.jsのライフサイクルフック・デバック用【Compsition API】
先述したライフサイクルフック以外にも、実はデバック用のフックが存在します。
動作を監視したり、パフォーマンスを最適化したいときに役立ちます。
それがこちら↓
①:「onRenderTracked」
②:「onRenderTriggered」
流れとしてはこう(※大まかな流れとなります)
↓
⓪ <script setup >が実行
↓
①「onBeforeMount」が実行
↓
「onRenderTracked」が実行
↓
ここでmountされる
↓
②「onMounted」が実行
ーーーーーーーーーーーーーーーー
再レンダリングされる場合
ーーーーーーーーーーーーーーーー
③「onBeforeUpdate」が実行
↓
「onRenderTriggered」が実行
↓
ここで再レンダリング
↓
④「onUpdated」が実行
順に見ていきましょう。
「onRenderTracked」はリアクティブ変数が追跡されたときに実行されるライフサイクルフックのこと。
ようはリアクティブ変数の初回アクセス時ですね。
引数を取り、値を取ることで何が検知されたかなど確認することができます。
import { ref, onRenderTracked } from 'vue';
onRenderTracked((e) => {
});
例として下記コードを実装すると、、
<script setup lang="ts">
import { ref, onRenderTracked } from 'vue';
const count = ref(0);
const toggle = ref(true);
onRenderTracked((e) => {
console.log('Render tracked:', e.target.value);
});
</script>
<template>
<p>{{ count }}</p>
<button @click="count++">ボタン</button>
<p>{{ toggle }}</p>
<button @click="toggle = !toggle">{{ toggle }}</button>
</template>
最初のレンダリング処理でコンソールログに下記が反映されます。
リアクティブ変数の初回アクセス時の値を取得できました。
(実際e.target.valueと打つと、 vs code上で.valueに波線が入りましたが。。オブジェクトにないとのこと。。)
「onRenderTriggered」はリアクティブ変数の変更により、コンポーネントが再レンダリングされるときに実行されるライフサイクルフックのこと。
引数を取り、値を取ることで何が再レンダリングされたかなど確認することができます。
import { ref, onRenderTriggered } from 'vue';
onRenderTriggered((e) => {
});
例として下記コードを実装。
<script setup lang="ts">
import { ref, onRenderTriggered } from 'vue';
const count = ref(0);
const toggle = ref(true);
onRenderTriggered((e) => {
console.log('Render triggered:', e);
});
</script>
<template>
<p>{{ count }}</p>
<button @click="count++">ボタン</button>
<p>{{ toggle }}</p>
<button @click="toggle = !toggle">{{ toggle }}</button>
</template>
「ボタン」を5回クリック後、「true falseボタン」を3回クリックした結果のコンソールがこちら↓
クリックしてリアクティブ変数が変更されたときに実行され、値を取得しているのがわかりますね。
ちなみに「onRenderTriggered」は、newValueというプロパティが存在します。
これのおかげで、何の値に変更されたかを確認することが可能です。
【解説】Vue.jsのライフサイクルフックの使い方【Compsition API】:まとめ
- ライフサイクルとは、インスタンスが生成〜破棄までの一連の流れ
- ライフサイクルフックとは、その一連の流れの特定のタイミングで実行されるメソッド
主なフックの大まかな流れ
⓪ <script setup >が実行
↓
①「onBeforeMount」が実行
↓
ここでmountされる
↓
②「onMounted」が実行
ーーーーーーーーーーーーーーーー
再レンダリングされる場合
ーーーーーーーーーーーーーーーー
③「onBeforeUpdate」が実行
↓
ここで再レンダリング
↓
④「onUpdated」が実行
ーーーーーーーーーーーーーーーー
unmountされる場合
ーーーーーーーーーーーーーーーー
⑤「onBeforeUnmount」が実行
↓
ここでunmountされる
↓
⑥「onUnmounted」が実行
デバック用フックを入れた大まかな流れ
⓪ <script setup >が実行
↓
①「onBeforeMount」が実行
↓
「onRenderTracked」が実行
↓
ここでmountされる
↓
②「onMounted」が実行
ーーーーーーーーーーーーーーーー
再レンダリングされる場合
ーーーーーーーーーーーーーーーー
③「onBeforeUpdate」が実行
↓
「onRenderTriggered」が実行
↓
ここで再レンダリング
↓
④「onUpdated」が実行
ライフサイクルフックを使う時はためしてみてね!