Vue.js 的生命周期钩子函数是在 Vue 实例的不同阶段执行的一些特殊函数。它们允许你在特定时刻执行自定义逻辑。Vue 2 和 Vue 3 的生命周期钩子函数有很多相似之处,但也有一些区别。下面是 Vue 2 和 Vue 3 生命周期钩子函数的详细解释和比较。
Vue 2 生命周期钩子函数:
- beforeCreate:在实例初始化之后、数据观测 (data observer) 和 event/watcher 事件配置之前被调用。
- created:在实例创建完成后被立即调用。在这一步,实例已完成以下的配置:数据观测 (data observer),属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。
- beforeMount:在挂载开始之前被调用:相关的 render 函数首次被调用。
- mounted:实例被挂载后调用,这时 el 被新创建的 vm.el 也在文档内。
- beforeUpdate:数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。你可以在这个钩子中进一步地更改状态,这不会触发附加的重渲染过程。
- updated:实例更新完毕后调用。这时,DOM 中的所有指令都已更新完成,你现在可以执行依赖于 DOM 的操作。然而,建议避免在此期间更改状态,因为这可能会导致更新无限循环。
- beforeDestroy:实例销毁之前调用。在这一步,实例仍然完全可用。
- destroyed:实例销毁后调用。调用后,所有的事件监听器会被移除,所有的子实例也会被销毁。
Vue 3 生命周期钩子函数:
- beforeCreate 和 created 在 Vue 3 中已被移除,取而代之的是 setup() 函数,它是 Vue 3 中的新特性,用于在组件实例化时设置响应式数据和函数。
- beforeMount:与 Vue 2 相同。
- mounted:与 Vue 2 相同。
- beforeUpdate:与 Vue 2 相同。
- updated:与 Vue 2 相同。
- beforeUnmount:在 Vue 3 中,beforeDestroy 被重命名为 beforeUnmount。
- unmounted:在 Vue 3 中,destroyed 被重命名为 unmounted。
举例:
Vue 2 示例:
new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
},
beforeCreate: function () {
console.log('beforeCreate');
},
created: function () {
console.log('created');
},
beforeMount: function () {
console.log('beforeMount');
},
mounted: function () {
console.log('mounted');
},
beforeUpdate: function () {
console.log('beforeUpdate');
},
updated: function () {
console.log('updated');
},
beforeDestroy: function () {
console.log('beforeDestroy');
},
destroyed: function () {
console.log('destroyed');
}
});
Vue 3 示例:
import { createApp, onMounted, onUnmounted, onUpdated, onBeforeUpdate, onBeforeUnmount } from 'vue';
const app = createApp({
data() {
return {
message: 'Hello Vue 3!'
};
},
setup() {
console.log('setup');
onBeforeMount(() => {
console.log('beforeMount');
});
onMounted(() => {
console.log('mounted');
});
onBeforeUpdate(() => {
console.log('beforeUpdate');
});
onUpdated(() => {
console.log('updated');
});
onBeforeUnmount(() => {
console.log('beforeUnmount');
});
onUnmounted(() => {
console.log('unmounted');
});
}
});
app.mount('#app');
这些示例展示了 Vue 2 和 Vue 3 生命周期钩子函数的使用方法和不同点。在 Vue 3 中,使用了新的 setup() 函数和 Composition API 来替代 Vue 2 中的 beforeCreate 和 created 钩子函数。其他钩子函数的使用方法基本相同,只是在 Vue 3 中,beforeDestroy 和 destroyed 被重命名为 beforeUnmount 和 unmounted。