Vue.js 是一个渐进式的 JavaScript 框架,用于构建用户界面。Vue 3 在性能、API 设计和开发者体验方面进行了重大改进。理解 Vue 3 的生命周期函数(Lifecycle Hooks)对于开发高效的 Vue 应用至关重要。本文将详细介绍 Vue 3 的生命周期钩子、每个阶段的作用及其代码示例,帮助读者更好地掌握这一重要概念。
Vue 实例从创建到销毁经历了一系列的阶段,这些阶段被称为生命周期。在每个阶段,Vue 提供了相应的钩子函数(Lifecycle Hooks),允许开发者在特定的时间点执行自定义逻辑。
以下是 Vue 3 的生命周期图:
(new) --> beforeCreate() --> created() --> beforeMount() --> mounted()
| |
v v
(setup phase) (render DOM)
| |
v v
updated() beforeUpdate()
| |
v v
unmounted() beforeUnmount()
Vue 3 引入了 Composition API 和 setup
函数,使得组件逻辑更加模块化和可复用。此外,部分生命周期钩子名称有所变化,以更清晰地表达其含义。
beforeCreate
(已废弃)el
和 data
属性都未初始化。beforeCreate
已经被废弃,因为 setup
函数提供了更好的初始化机制。created
(已废弃)data
已经初始化,但还没有挂载到 DOM 上。created
已经被废弃,推荐使用 setup
函数来替代。setup
示例代码:
import { defineComponent, ref, onMounted } from 'vue';
export default defineComponent({
setup() {
const message = ref('Hello Vue 3!');
onMounted(() => {
console.log('Component is mounted:', message.value);
});
return {
message
};
}
});
onBeforeMount
el
和 template
已经编译为虚拟 DOM,但尚未渲染到页面上。onMounted
示例代码:
import { defineComponent, onMounted } from 'vue';
export default defineComponent({
setup() {
onMounted(() => {
console.log('Component is mounted');
// 初始化第三方库,如 jQuery 插件
});
return {};
}
});
onBeforeUpdate
onUpdated
示例代码:
import { defineComponent, ref, onUpdated } from 'vue';
export default defineComponent({
setup() {
const message = ref('Hello Vue 3!');
const changeMessage = () => {
message.value = 'Updated Message';
};
onUpdated(() => {
console.log('Component is updated:', message.value);
});
return {
message,
changeMessage
};
}
});
onBeforeUnmount
onUnmounted
示例代码:
import { defineComponent, ref, onBeforeUnmount, onUnmounted } from 'vue';
export default defineComponent({
setup() {
const timer = setInterval(() => {
console.log('Timer running...');
}, 1000);
onBeforeUnmount(() => {
clearInterval(timer);
console.log('Timer cleared before unmount.');
});
onUnmounted(() => {
console.log('Component has been unmounted.');
});
return {};
}
});
Vue 3 引入了 Composition API,它提供了一种更灵活的方式来组织和重用逻辑。相比传统的 Options API,Composition API 更加模块化,特别适用于复杂逻辑的拆分和组合。
Options API 示例:
export default {
data() {
return {
message: 'Hello Vue 3!'
};
},
created() {
console.log('Component created');
},
mounted() {
console.log('Component mounted');
}
};
Composition API 示例:
import { defineComponent, ref, onMounted } from 'vue';
export default defineComponent({
setup() {
const message = ref('Hello Vue 3!');
onMounted(() => {
console.log('Component is mounted:', message.value);
});
return {
message
};
}
});
假设我们正在开发一个简单的计数器组件,它需要在页面加载时从服务器获取初始计数值,并在每次点击按钮时更新计数。
示例代码:
{{ count }}