引言:Vue 页面初始化的痛点
在日常 Vue 开发中,你是否遇到过这些场景:页面加载时需要立即获取用户信息、初始化配置项、预加载关键数据?这些初始化逻辑该放在哪里执行最合适?created、mounted 还是 onMounted?不同版本的 Vue 又有哪些差异?
本文将深入探讨 Vue 页面初始化执行方法的最佳实践,覆盖 Vue 2 和 Vue 3 的核心场景,帮你构建高性能的初始化流程。
Vue 生命周期钩子:初始化的基石
Vue 2 Options API 生命周期
在 Vue 2 中,组件的生命周期钩子提供了多个初始化时机:
export default {
// 实例初始化后,数据观测前
beforeCreate() {
console.log('组件实例刚创建,data 和 methods 还不可用');
},
// 实例创建完成,可访问 data、computed、methods
created() {
console.log('最早可以访问 data 的时机');
this.fetchUserData(); // 适合发起网络请求
},
// DOM 挂载前
beforeMount() {
console.log('模板编译完成,但还未挂载到 DOM');
},
// DOM 挂载完成
mounted() {
console.log('可以访问 DOM 元素了');
this.initChart(); // 适合初始化需要 DOM 的第三方库
}
}Vue 3 Composition API 生命周期
Vue 3 引入了 Composition API,生命周期钩子变成了可组合的函数:
import { onBeforeMount, onMounted, onBeforeUnmount, ref } from 'vue';
export default {
setup() {
const userData = ref(null);
// setup 本身就是最早的初始化时机
console.log('setup 执行,相当于 beforeCreate + created');
// 异步数据获取
const fetchUserData = async () => {
const response = await fetch('/api/user');
userData.value = await response.json();
};
// 立即执行初始化
fetchUserData();
onBeforeMount(() => {
console.log('即将挂载 DOM');
});
onMounted(() => {
console.log('DOM 已挂载,可以操作 DOM');
});
return { userData };
}
}