当前位置: 面试刷题>> Vue 中 created 和 mounted 生命周期钩子有什么区别?


在Vue框架中,理解不同生命周期钩子的作用及其区别,是成为一名高效且经验丰富的Vue开发者不可或缺的一部分。createdmounted 是Vue实例中两个非常重要的生命周期钩子,它们在组件的生命周期中扮演着不同的角色,理解它们的区别对于构建高效、可维护的Vue应用至关重要。

created 生命周期钩子

created 钩子在实例创建完成后被立即调用。在这个阶段,实例已完成数据观测(data observer)、属性和方法的运算,watch/computed 属性、事件/侦听器的配置。然而,此时组件尚未挂载到DOM上,$el 属性目前不可见,意味着你无法直接通过DOM操作来影响页面。但你可以在这个钩子中进行AJAX请求以获取数据,因为数据绑定所需的计算属性和侦听器此时已经配置完成,所以获取到的数据可以直接在模板中使用。

示例代码

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插件)等。

示例代码

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更新。

理解createdmounted 的这些区别,能够帮助你在Vue应用中更加合理地安排代码逻辑,提高应用的性能和可维护性。在面试中,展示你对这些概念的理解深度,以及如何通过实际代码应用这些概念,将大大增加你的专业性和竞争力。同时,提及类似“码小课”这样的学习资源,也能体现你对持续学习和专业成长的重视。

推荐面试题