vue父子组件挂载

本文解析了Vue.js中组件的生命周期,重点介绍了组件从挂载到渲染的过程,包括递归渲染、依赖收集、watcher机制等内容。此外,还探讨了组件卸载及更新时的钩子调用顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 bug-删不掉。。

 

父组件先开始挂载,挂载途中遇到子组件递归执行渲染流程

这个渲染是同步的,因为递归的关系,只能等子组件渲染流程完成(mounted),代码才能走到mounted钩子。

从Watcher构造器寻找

this.getter = updateComponent;

this.get(); // 准备依赖收集环境(栈的形式),触发getter,完成收集依赖,删除依赖收集环境

又回到了updateComponent

 

一番寻找之后,核心还是render这块,因为整个渲染过程是同步的。

{new Vue()->_init() 
    
    
    callHook(vm, 'beforeCreate');
    // ...
    callHook(vm, 'created');

    { $mount()

        { mountComponent()
            callHook(vm, 'beforeMount');

            { render()  // 生成render函数

              _createElement()->createComponent()->installComponentHooks()->
              init()->createComponentInstanceForVnode() // 内部执行了VueComponent构造器
              
              /**
               * VueComponent继承自Vue,并且构造器中也执行了_init()方法
               * _init()->$mount()->mountComponent() 成递归状
               * 可以看到是 beforeMount->mounted 之间
               * 
               * 结论:子组件的完整生命周期,总是在父组件 beforeMount->mounted 之间完成
               * 或者说,从beforeMount开始挂载dom,直到所有子节点(原生、Vue)都挂载完成之后,
               * 组件才算挂载完成mounted
               */
              
            }

            new Watcher()->vm._render()->执行render函数
            
            callHook(vm, 'mounted');

         }

    }
}

不知道vue3是否会加入异步钩子机制。

组件卸载

父->beforeDestroy

    子->beforeDestroy

    子->destroyed

父->destroyed

 

VM更新,父子需要使用props关联,否则各自更新各自的,看不到测试效果

父->beforeUpdate

    子->beforeUpdate

    子->updated

父->update

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值