Vue.js ライフサイクルフック
ライフサイクルフック
Vue.jsのライフサイクルフックを使って、カウンターアプリを作成します。
タスク
mounted()フック
コンポーネントがマウントされた時の処理を実装する
updated()フック
データが更新された時の処理を実装する
unmounted()フック
コンポーネントがアンマウントされた時の処理を実装する
ヒント
mounted()、updated()、unmounted()フックを使って、コンポーネントのライフサイクルをログに記録しましょう。
参考コード
// カウンターコンポーネント const CounterComponent = { template: ` <div class="counter"> <h3>カウンター</h3> <div class="count">{{ count }}</div> <div> <button @click="increment">+1</button> <button @click="decrement">-1</button> <button @click="reset">リセット</button> </div> <div class="logs"> <h4>ライフサイクルログ</h4> <div v-for="(log, index) in logs" :key="index" :class="['log', log.type]"> {{ log.message }} </div> </div> </div> `, data() { return { count: 0, logs: [], updateCount: 0 } }, methods: { increment() { this.count++ this.updateCount++ }, decrement() { this.count-- this.updateCount++ }, reset() { this.count = 0 this.updateCount++ }, addLog(message, type) { this.logs.push({ message: `${new Date().toLocaleTimeString()}: ${message}`, type: type }) } }, // マウント時の処理 mounted() { this.addLog('コンポーネントがマウントされました', 'mounted') }, // 更新時の処理 updated() { // ログの更新による無限ループを防ぐため、更新回数で判定 if (this.updateCount > 0) { this.addLog(`カウンターが更新されました: ${this.count}`, 'updated') this.updateCount = 0 } }, // アンマウント時の処理 unmounted() { this.addLog('コンポーネントがアンマウントされました', 'unmounted') } } // メインアプリケーション const app = Vue.createApp({ components: { 'counter-component': CounterComponent } }) // マウント app.mount('#app')