Vue2 - 生命周期
Vue2 的生命周期钩子函数用于在组件生命周期的不同阶段执行特定的逻辑。
以下是 Vue2 生命周期的详细说明和示例。
new Vue({
beforeCreate: function() {
// 在此阶段不可以访问实例的属性和方法
console.log("beforeCreate");
}
});
new Vue({
created: function() {
// 可以访问实例的属性和方法
console.log("created");
}
});
new Vue({
beforeMount: function() {
// 此时实例的模板已经编译成了渲染函数
console.log("beforeMount");
}
});
new Vue({
mounted: function() {
// 可以访问实例的 DOM 元素
console.log("mounted");
}
});
new Vue({
beforeUpdate: function() {
console.log("beforeUpdate");
}
});
new Vue({
updated: function() {
console.log("updated");
}
});
new Vue({
beforeDestroy: function() {
// 可以执行一些清理工作,如清除定时器或取消订阅
console.log("beforeDestroy");
}
});
new Vue({
destroyed: function() {
console.log("destroyed");
}
});
示例
下面是一个完整的示例,展示了 Vue 2 生命周期的各个阶段。
<div id="app">
<p>{{message}}</p>
</div>
<script>
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");
}
})
</script>
Vue3 生命周期
相较于 Vue2 ,Vue3提供了一些新的生命周期钩子函数以及对原有生命周期钩子函数的改动
export default {
/* Vue3 beforeCreate 生命周期钩子 */
beforeCreate() {
console.log('beforeCreate');
console.log(this.$data); // undefined
console.log(this.$el); // undefined
},
/* Vue2 created 生命周期钩子 */
created() {
console.log('created');
console.log(this.$data); // { ... } (已初始化)
console.log(this.$el); // undefined
}
}
export default {
/* Vue3 created 生命周期钩子 */
created() {
console.log('created');
console.log(this.$data); // { ... } (已初始化)
console.log(this.$el); // undefined
},
/* Vue2 mounted 生命周期钩子 */
mounted() {
console.log('mounted');
console.log(this.$data); // { ... } (已初始化)
console.log(this.$el); // <div>...</div> (已挂载)
}
}
export default {
/* Vue3 beforeMount 生命周期钩子 */
beforeMount() {
console.log('beforeMount');
console.log(this.$el); // undefined
},
/* Vue2 beforeMount 生命周期钩子 */
mounted() {
console.log('mounted');
console.log(this.$el); // <div>...</div> (已挂载)
}
}
export default {
/* Vue3 mounted 生命周期钩子 */
mounted() {
console.log('mounted');
console.log(this.$el); // <div>...</div> (已挂载)
},
/* Vue2 beforeUpdate 生命周期钩子 */
updated() {
console.log('updated');
console.log(this.$el); // <div>...</div> (已更新)
}
}
export default {
/* Vue3 beforeUpdate 生命周期钩子 */
beforeUpdate() {
console.log('beforeUpdate');
console.log(this.$el); // <div>...</div> (旧的DOM)
},
/* Vue2 beforeUpdate 生命周期钩子 */
updated() {
console.log('updated');
console.log(this.$el); // <div>...</div> (已更新)
}
}
export default {
/* Vue3 updated 生命周期钩子 */
updated() {
console.log('updated');
console.log(this.$el); // <div>...</div> (已更新)
},
/* Vue2 beforeUnmount 生命周期钩子 */
beforeUnmount() {
console.log('beforeUnmount');
console.log(this.$el); // <div>...</div> (将要被卸载)
}
}
export default {
/* Vue3 beforeUnmount 生命周期钩子 */
beforeUnmount() {
console.log('beforeUnmount);
console.log(this.$el); // <div>...</div> (将要被卸载)
},
/* Vue2 destroyed 生命周期钩子 */
destroyed() {
console.log('destroyed');
console.log(this.$el); // undefined
}
}
activated
、 deactivated
、 errorCaptured
等。这些钩子函数在 Vue3
中已经废弃或替代。
总结: Vue3 引入了新的生命周期钩子函数,并对原有的部分钩子函数进行了更名和改动。使用新的生命周期钩子函数能够更好地管理组件的生命周期和实现更细粒度的控制。