返回

剖析 Vue 关键钩子:初始化与挂载的执行奥秘

前端

在 Vue.js 的世界中,组件的生命周期就像一场精彩的舞台剧,而钩子则扮演着幕后导演的角色,指引着组件在不同阶段的演出。其中,初始化钩子和挂载钩子是两颗璀璨的明星,它们携手合作,共同 orchestrating the birth of a component。

  1. 初始化钩子:孕育新生的舞台

    初始化钩子,顾名思义,是在组件实例创建时被调用的。它就像是一位细心的保姆,负责为组件的诞生做好万全准备。在这个阶段,组件的 data 和 computed 属性被初始化,而 methods 和生命周期钩子函数也被定义。

    // 这是初始化钩子
    created() {
      // 组件实例刚刚被创建。
    }
    
  2. 挂载钩子:登台亮相的时刻

    当组件实例准备就绪,它就会被挂载到 DOM 中。挂载钩子正是为这一激动人心的时刻而生。它就像一位经验丰富的导演,指挥着组件在舞台上闪亮登场。在挂载钩子中,组件的 template 被编译,并插入到指定的挂载元素中。

    // 这是挂载钩子
    mounted() {
      // 组件实例刚刚被挂载到 DOM 中。
    }
    
  3. 执行顺序:幕后导演的调度艺术

    初始化钩子和挂载钩子的执行顺序就像一场精心编排的舞蹈。它们按照严格的顺序依次登场,为组件的生命周期增添了节奏和韵律。

    • 父组件的初始化钩子先于子组件的初始化钩子执行。
    • 父组件的挂载钩子先于子组件的挂载钩子执行。
    • 初始化钩子和挂载钩子都先于其他生命周期钩子执行。
    父组件:
      created()
      mounted()
    
    子组件:
      created()
      mounted()
    
  4. 应用实例:一窥幕后的精彩世界

    为了更好地理解初始化钩子和挂载钩子的作用,让我们通过一个简单的示例来探索它们在实践中的应用。

    假设我们有一个父组件和一个子组件,如下所示:

    <template>
      <div>
        <child-component></child-component>
      </div>
    </template>
    
    // 父组件
    export default {
      created() {
        console.log('父组件的 created 钩子被调用了');
      },
      mounted() {
        console.log('父组件的 mounted 钩子被调用了');
      }
    }
    
    // 子组件
    export default {
      created() {
        console.log('子组件的 created 钩子被调用了');
      },
      mounted() {
        console.log('子组件的 mounted 钩子被调用了');
      }
    }
    

    当我们运行这个示例时,控制台将打印出以下输出:

    父组件的 created 钩子被调用了
    子组件的 created 钩子被调用了
    父组件的 mounted 钩子被调用了
    子组件的 mounted 钩子被调用了
    

    从输出中可以看出,父组件的初始化钩子和挂载钩子先于子组件的初始化钩子和挂载钩子执行。这正是钩子执行顺序的体现。

  5. 总结:钩子之舞的启示

    初始化钩子和挂载钩子是 Vue.js 组件生命周期中不可或缺的两颗明星。它们携手合作,为组件的诞生和亮相提供了坚实的基础。通过剖析它们的执行顺序,我们不仅加深了对 Vue.js 生命周期的理解,也领略了钩子之舞的奥妙。