在使用 Vue 开发应用时,我们经常需要在组件加载、更新或销毁时执行一些特定逻辑,例如:
Vue 提供了一套完整的生命周期钩子函数(Lifecycle Hooks),允许我们在组件的不同阶段插入自定义逻辑。掌握 Vue 实例的生命周期,是构建可维护、高性能 Vue 应用的关键。
本文将带你深入了解 Vue 实例(包括 Vue 2 和 Vue 3)的完整生命周期流程,并结合实际开发场景讲解每个钩子的作用和使用技巧。
生命周期 是指一个 Vue 实例从被创建到最终被销毁的整个过程。在这个过程中,Vue 会自动调用一些钩子函数(Hook),我们可以利用这些钩子来插入自己的逻辑代码。
生命周期本质上是一个状态机模型,不同阶段触发不同回调函数。
以下是 Vue 2 实例的生命周期流程图简要概括:
beforeCreate
↓
created
↓
beforeMount
↓
mounted
↓
beforeUpdate
↓
updated
↓
beforeDestroy
↓
destroyed
beforeCreate
data
和 methods
还未被初始化。beforeCreate() {
console.log('beforeCreate: 尚未访问 data');
}
created
data
和 methods
已经可以访问。created() {
console.log('created: data 已初始化', this.message);
}
beforeMount
beforeMount() {
console.log('beforeMount: 模板即将渲染');
}
mounted
mounted() {
console.log('mounted: DOM 已渲染完毕', document.getElementById('myDiv'));
}
beforeUpdate
beforeUpdate() {
console.log('beforeUpdate: 数据已变更,DOM 即将更新');
}
updated
updated() {
console.log('updated: DOM 已更新');
}
beforeDestroy
beforeDestroy() {
clearInterval(this.timer); // 假设之前设置了定时器
console.log('beforeDestroy: 正在清理资源');
}
destroyed
destroyed() {
console.log('destroyed: 实例已销毁');
}
在 Vue 3 的 Composition API 写法中,生命周期钩子发生了变化:
Vue 2 钩子名 | Vue 3 Composition API |
---|---|
beforeCreate |
不再需要(setup 代替) |
created |
不再需要(setup 代替) |
beforeMount |
onBeforeMount() |
mounted |
onMounted() |
beforeUpdate |
onBeforeUpdate() |
updated |
onUpdated() |
beforeDestroy |
onBeforeUnmount() |
destroyed |
onUnmounted() |
场景 | 推荐生命周期钩子 |
---|---|
初始化数据 | created / onMounted |
请求数据 | created / onMounted |
操作 DOM | mounted / onMounted |
注册/移除事件监听 | mounted + beforeDestroy / onMounted + onUnmounted |
设置定时器 | mounted / onMounted |
清理定时器、资源 | beforeDestroy / onUnmounted |
响应数据更新 | updated / onUpdated |
感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!