vue 生命周期 父子组件的生命周期执行顺序

父子组件生命周期执行顺序

加载渲染过程:

父 beforeCreate -> 父 created -> 父 beforeMount -> 子 beforeCreate -> 子 created -> 子 beforeMount -> 子 mounted -> 父 mounted

子组件更新过程: 父 beforeUpdate -> 子 beforeUpdate -> 子 updated -> 父 updated

父组件更新过程: 父 beforeUpdate -> 父 updated

销毁过程: 父 beforeDestroy -> 子 beforeDestroy -> 子 destroyed -> 父 destroyed

总结:

子的生命周期都会被先结束,父的才结束。先由父到子,再从子到父。 生命周期遵从“从外到内,再从内到外,mixins先于组件”的原则。

总的来说,从创建到挂载,是从外到内,再从内到外,且mixins的钩子函数总是在当前组件之前执行

lifestyle.vue


<template>
  <div>
    <h3 id="dom">子组件Dom 值</h3>
    <p id="pppp">子组件message的值是: {{ message }}</p>
    <button @click="btnAddMessage">子组件修改message的值</button>
    <el-input
      type="text"
      v-model="value.data"
      @change="(v) => changeData('data', v)"
    ></el-input>
  </div>
</template>
<script>
export default {
  name:"lifestyle",
  data(){
    return{
       message:"hello,Vue.js"
    }
  },
  props:{
    value:[Object]
  },
  methods:{
     btnAddMessage() {
      this.amessage += "#";
    },
    changeData(key,v){ 
      const emitVal={...this.value,[key]:v}
      this.$emit('input',emitVal)
    },
  },
  beforeCreate(){
      console.log(this.message,"子组件beforeCreate-获取data")
  },
  created(){
    console.log(this.message,"子组件Created-获取data")
  },
  beforeMount(){
    const DEMOH3 = document.querySelector("#dom");
    console.log(DEMOH3,"子组件beforeMount-获取dom");
  },
  mounted(){
    const DEMOH3 = document.querySelector("#dom");
    console.log(DEMOH3,"子组件Mounted-获取dom");
  },
  beforeUpdate(){
    console.log('子组件beforeUpdate触发了');
  },
  updated() {
    console.log('子组件Update触发了');
    },
  beforeDestroy(){
    console.log('子组件beforeDestroy触发了');
  },
  destroyed(){
    console.log('子组件destroyed触发了');
  }
}
</script>

indexl.vue

<template>
  <div>
    <h3 id="dom">Dom 值</h3>
    <p id="pppp">message的值是: {{ message }}</p>
    <button @click="btnAddMessage">修改message的值</button>
    <lifestyle v-model="input1"></lifestyle> {{ input1 }}
  </div>
</template>
<script>
export default {
  name:"indexl",
  data(){
    return{
      input1:{data:'212'},
      message:"hello,Vue.js",
    }
  },
  methods:{
     btnAddMessage() {
      this.message += "~";
    },
  },
  beforeCreate(){
      console.log(this.message,"beforeCreate-获取data")
    },
    created(){
      console.log(this.message,"Created-获取data")
    },
    beforeMount(){
      const DEMOH3 = document.querySelector("#dom");
      console.log(DEMOH3,"beforeMount-获取dom");

    },
    mounted(){
      const DEMOH3 = document.querySelector("#dom");
      console.log(DEMOH3,"Mounted-获取dom");

    },
    beforeUpdate(){
      console.log('beforeUpdate触发了');
    },
    updated() {
      console.log('Update触发了');
    },
    beforeDestroy(){
      console.log('beforeDestroy触发了')
    },
    destroyed(){
      console.log('destroyed触发了')
    }
}
</script>

Vue 中,父子组件生命周期钩子执行顺序是 **非常关键的**,理解它有助于在合适的时间点执行数据初始化、DOM 操作、事件绑定等操作。 --- ### 📌 Vue 父子组件生命周期执行顺序(以创建阶段为例) #### 1. **父组件 beforeCreate** #### 2. **父组件 created** #### 3. **父组件 beforeMount** #### 4. **子组件 beforeCreate** #### 5. **子组件 created** #### 6. **子组件 beforeMount** #### 7. **子组件 mounted** #### 8. **父组件 mounted** --- ### 🧩 更新阶段(当数据变更时) #### 1. **父组件 beforeUpdate** #### 2. **子组件 beforeUpdate** #### 3. **子组件 updated** #### 4. **父组件 updated** --- ### 🧼 销毁阶段 #### 1. **父组件 beforeUnmount** #### 2. **子组件 beforeUnmount** #### 3. **子组件 unmounted** #### 4. **父组件 unmounted** --- ### ✅ 示例说明 ```vue <!-- Parent.vue --> <template> <Child /> </template> <script> import Child from './Child.vue'; export default { components: { Child }, beforeCreate() { console.log('父 beforeCreate'); }, created() { console.log('父 created'); }, beforeMount() { console.log('父 beforeMount'); }, mounted() { console.log('父 mounted'); }, beforeUpdate() { console.log('父 beforeUpdate'); }, updated() { console.log('父 updated'); }, beforeUnmount() { console.log('父 beforeUnmount'); }, unmounted() { console.log('父 unmounted'); } } </script> ``` ```vue <!-- Child.vue --> <template> <div>Child Component</div> </template> <script> export default { beforeCreate() { console.log('子 beforeCreate'); }, created() { console.log('子 created'); }, beforeMount() { console.log('子 beforeMount'); }, mounted() { console.log('子 mounted'); }, beforeUpdate() { console.log('子 beforeUpdate'); }, updated() { console.log('子 updated'); }, beforeUnmount() { console.log('子 beforeUnmount'); }, unmounted() { console.log('子 unmounted'); } } </script> ``` --- ### 📝 总结 - **创建阶段**:父组件先开始创建,然后渲染子组件。 - **挂载阶段**:子组件先挂载完成,父组件才完成挂载。 - **更新和销毁阶段**:同样遵循父触发、子响应、再父完成顺序。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值