当前位置: 面试刷题>> Vue 中 created 和 mounted 生命周期钩子有什么区别?
在Vue框架中,理解不同生命周期钩子的作用及其区别,是成为一名高效且经验丰富的Vue开发者不可或缺的一部分。`created` 和 `mounted` 是Vue实例中两个非常重要的生命周期钩子,它们在组件的生命周期中扮演着不同的角色,理解它们的区别对于构建高效、可维护的Vue应用至关重要。
### created 生命周期钩子
`created` 钩子在实例创建完成后被立即调用。在这个阶段,实例已完成数据观测(data observer)、属性和方法的运算,`watch/computed` 属性、事件/侦听器的配置。然而,此时组件尚未挂载到DOM上,`$el` 属性目前不可见,意味着你无法直接通过DOM操作来影响页面。但你可以在这个钩子中进行AJAX请求以获取数据,因为数据绑定所需的计算属性和侦听器此时已经配置完成,所以获取到的数据可以直接在模板中使用。
**示例代码**:
```javascript
export default {
data() {
return {
userInfo: null
};
},
created() {
// 组件创建后立即调用
// 此时可以发起网络请求,但DOM还未挂载
fetchUserInfo().then(data => {
this.userInfo = data;
});
}
}
```
在这个例子中,`created` 钩子用于在组件实例化后立即发起一个网络请求来获取用户信息,尽管此时DOM还未挂载,但数据获取是合理的,因为数据绑定机制已经就绪。
### mounted 生命周期钩子
`mounted` 钩子在el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用。该钩子在服务器端渲染期间不被调用。在这个阶段,组件已经被挂载到了DOM上,因此你可以通过DOM API来操作页面元素了。这通常用于执行依赖于DOM的操作,如设置焦点、监听DOM事件或启动第三方库(如jQuery插件)等。
**示例代码**:
```javascript
export default {
mounted() {
// 组件挂载到DOM后调用
// 此时可以访问和操作DOM
this.$el.querySelector('.some-element').focus();
// 或者初始化一些依赖于DOM的第三方库
initSomeLibrary(this.$el);
}
}
```
在上面的例子中,`mounted` 钩子用于在组件挂载到DOM之后,通过DOM API来设置焦点或初始化一些依赖于DOM的库。
### 区别总结
- **执行时机**:`created` 钩子在实例创建后立即调用,此时实例已完成数据观测等初始化工作,但DOM尚未挂载;而`mounted` 钩子在组件挂载到DOM上之后调用,此时可以安全地进行DOM操作。
- **用途**:`created` 通常用于执行与数据相关的操作,如发起网络请求;而`mounted` 则更多用于执行依赖于DOM的操作,如设置焦点、监听DOM事件等。
- **性能考量**:虽然可以在`created` 中发起网络请求,但如果在`mounted` 中进行,可以确保DOM操作(如使用数据更新DOM)在数据到达后执行,从而避免潜在的竞争条件或不必要的DOM更新。
理解`created` 和 `mounted` 的这些区别,能够帮助你在Vue应用中更加合理地安排代码逻辑,提高应用的性能和可维护性。在面试中,展示你对这些概念的理解深度,以及如何通过实际代码应用这些概念,将大大增加你的专业性和竞争力。同时,提及类似“码小课”这样的学习资源,也能体现你对持续学习和专业成长的重视。