Vue.jsのライフサイクルフックについて確認してみます。
サンプルコード
データの更新とインスタンス破棄の動作確認用にボタンを追加します。
<div id="app"> {{ counter }} <button v-on:click="update">Add 1</button> <button v-on:click="destroy">破棄</button> </div>
各フックを設定して、実行されるタイミングなどを確認してみます。
var app = new Vue({ el: '#app', data: { counter: 0 }, methods: { // beforeUpdate・updated 確認用 update: function() { this.counter += 1; }, // beforeDestroy・destroyed 確認用 destroy: function() { this.$destroy(); } }, // インスタンスが初期化されるときに実行。データは初期化される前。 beforeCreate: function() { console.group('beforeCreate'); console.log(this.$data); console.log(this.$el); console.groupEnd(); }, // インスタンスが作成された後に実行。データは初期化された後。 created: function() { console.group('created'); console.log(this.$data); console.log(this.$el); console.groupEnd(); }, // インスタンスがDOM要素にマウントされる前に実行。 beforeMount: function() { console.group('beforeMount'); console.log(this.$data); console.log(this.$el); console.groupEnd(); }, // インスタンスがDOM要素にマウントされた後に実行。 mounted: function() { console.group('mounted'); console.log(this.$data); console.log(this.$el); console.groupEnd(); }, // DOM更新前に実行。データは更新済み。 beforeUpdate: function() { console.group('beforeUpdate'); console.log(this.$data.counter); console.log(this.$el); console.groupEnd(); }, // DOM更新後に実行。データは更新済み。 updated: function() { console.group('updated'); console.log(this.$data.counter); console.log(this.$el); console.groupEnd(); }, // インスタンスが破棄される前に実行。 beforeDestroy: function() { console.group('beforeDestroy'); console.groupEnd(); }, // インスタンスが破棄された後に実行。 destroyed: function() { console.group('destroyed'); console.groupEnd(); } });
ライフサイクルフックのデモページ
コメントでも記載していますが、各フックの内容は以下の通りです。
beforeCreate | データが初期化される前の、インスタンスが初期化されるときに実行される。 |
---|---|
created | インスタンスが作成された後に実行される。データは初期化されているが、マウンティング前なので$elは利用できない。 |
beforeMount | インスタンスがDOM要素にマウントされる前に実行される。 |
mounted | インスタンスがDOM要素にマウントされた後に実行される。 |
beforeUpdate | DOM更新前に実行される。データは更新済み。 |
updated | DOM更新後に実行される。データは更新済み。 |
beforeDestroy | インスタンスが破棄される前に実行される。 |
destroyed | インスタンスが破棄された後に実行される。 |
実行されるタイミングは beforeCreate → created → beforeMount → mounted の順で、データの更新があった場合には beforeUpdate → updated の順で実行、インスタンスが破棄された場合は beforeDestroy → destroyed の順で実行されます。
ライフサイクルの流れに関しては、公式サイトの図がわかりやすいです。
コメントが承認されるまで時間がかかります。