Vue.jsは、使いやすいフレームワークでありながら強力な機能を備えています。
Vue.jsを使ってウェブアプリを作ったり、ホームページを作るとき、コンポーネントのライフサイクルを知ることはとても大切です。
これが分かっていないと思い通りに動かないことが多々あり、重要な概念であります。
今回は、Vue.jsのライフサイクルに焦点を当てて、コンポーネントがどのように生まれ変わり、最終的に消えるかを確認してみましょう。
私はたまにしかvueを扱わないので毎回忘れちゃって毎回ググって毎回そのメモがどっか行くんですよね…
これは自分のための備忘録でもあります。
ライフサイクルとは?
Vue.jsのライフサイクルとは、コンポーネントが生成され、更新され、最終的に破棄される一連のステップを指します。
この特定のタイミングで自分のコードを実行することが可能です。
以下に主要なライフサイクルフックとその役割をご紹介します。
どのコードをどのタイミングで実行させるかを設定するために使うよ。
dataをちゃんと設定してるのに反映されない!って時はこれが原因かもよ。
主要なライフサイクルフックとそのステップ
実行の順番通りに書いています。
beforeCreate
インスタンスは生成されたがデータ(ref(), reactive(), computed()含む)が設定される前です。
dataはまだリアクティブにされておらず、
eventsもまだセットアップされていません。
beforeCreateの使用例
- 外部APIからデータを取得してコンポーネント内のデータを初期化する場合
- グローバルイベントを購読し、コンポーネントが生成される前にイベントハンドラを登録する場合
- 外部ライブラリを初期化して、コンポーネント内で利用できるようにする場合
- スタムの設定ファイルや環境変数を読み込んでコンポーネント内で利用する場合
- ユーザーの認証状態をチェックする場合
created(よく使う)
インスタンスが生成され、データが初期化された後です。
DOMはまだ生成されておらず、DOM操作は行えませんが、dataとeventsがセットアップされており、それらにアクセスできます。
beforeMount
インスタンスがDOM要素にマウントされる前です。 テンプレート内の要素やデータが、実際のDOMに適用される前のタイミングです。
beforeMountの使用例
- コンポーネントがDOMにマウントされる前に必要なDOM操作の前処理を行う場合
- 外部ライブラリを初期化し、DOM要素と統合する場合
- チャートやグラフを描画する準備を行う場合
- 外部APIからデータを取得して、そのデータを使ってコンポーネント内で描画する準備をする場合
mounted(よく使う)
インスタンスがDOM要素にマウントされた後です。 ここでやっとDOM(templateタグで囲んだHTML要素)操作が可能になります。
mountedフック内でDOM要素にアクセスして、初期化や外部ライブラリの統合を行うことができます。
beforeUpdate
データは更新されましたが、DOMに適用される前です。
(リアクティブなデータというのは常に監視され、値が変更・更新されると再描画が行われます。
その再描画の前にこのフックが呼び出されます。)
ただし、更新がなかった場合は呼び出されません。
beforeUpdateの使用例
- データが更新される前にデータを加工する処理をする場合
- 外部APIから最新のデータを取得し、コンポーネント内のデータを更新する準備を行う場合
- データが更新される前に、変更前のデータを保持したり、特定の処理を実行したりする場合
- フック内でデータを検証して整形し、変更が適切に行われるように準備する場合
updated
データが更新され、DOMに適用された後です。
リアクティブなデータが変更され、再描画が行われた後に呼び出されます。
DOMに変更が反映された後の処理をここで行うことができます。
updatedの使用例
- データが更新された後にDOM要素を再取得して操作を行う
- データが更新された後に特定の処理を行う場合。例えば、更新後のデータをログに出力する等。
- 外部APIから最新のデータを取得し、それをコンポーネント内で利用する場合
beforeDestroy
Vueインスタンスが破壊される前です。
このフック内では、インスタンスが破棄される前に必要なクリーンアップや解除の処理を行うことができます。
基本的にあまり使う機会はありません。
destroyed
Vueインスタンスが破壊された後です。
このフックは、インスタンスが完全に破棄された後に呼び出されます。インスタンスに関連するリソースの解放や後片付けを行うために使用できます。
基本的にあまり使う機会はありません。
ライフサイクルフック一覧
Vue.createApp({
data: function () {
return {
message: '',
}
},
beforeCreate() {
// インスタンス生成前のフックです。
},
created() {
// インスタンス生成後、データ初期化前のフックです。
},
beforeMount() {
// DOMへのマウント前のフックです。
},
mounted() {
// DOMへのマウント後のフックです。
},
beforeUpdate() {
// データ更新前のフックです。
},
updated() {
// データ更新後のフックです。
},
beforeDestroy() {
// インスタンス破棄前のフックです。
},
destroyed() {
// インスタンス破棄後のフックです。
}
}).mount('#app')
まとめ
Vue.jsのライフサイクルは、コンポーネントの生成、更新、破棄のプロセスを管理する重要な概念です。
各ステップで特定の処理を実行することで、アプリケーションの動作を細かく制御できます。
ライフサイクルを活用することで、より柔軟な開発が可能になります。
思い通りに行かない時は実行のタイミングが間違っていないかチェックしましょう!