首页 > 编程知识 正文

简述vue的生命周期,vue生命周期几个阶段

时间:2023-05-06 10:54:43 阅读:11528 作者:4972

vue实例的创建过程与组件的创建过程基本相同

首先,在实例中设置一些专用属性,例如以_开头的属性和以$开头的属性

运行声明周期钩子函数beforCreate

进入注入过程。 处理属性、computed、methods、data、provide和inject,最后使用代理模式装载到实例上

运行生命周期钩子函数created

生成render函数:如果有配置,请接受配置的render。 如果没有,请使用运行时编译器将模板编译为render

运行生命周期钩子函数beforMount

关于如何生成实际的dom,生成实际的dom,详细的过程可以看到我前面的文章。 请描述vue的diff算法。 它创建并观察Watcher,传递函数updateComponent,然后该函数执行_render以获得当前组件的虚拟dom的根节点(vnode )。

_render函数运行时收集所有依存关系,并在将来依存关系发生变化时重新执行updataComonent函数

_update函数运行时,将触发patch函数。 如果当前没有旧树,则这是第一次渲染,直接为当前虚拟dom树的所有常规节点生成elm属性(实际dom )。 如果有旧树,则表示以前渲染过,然后启动patch函数进行新旧两棵树的比较更新处理,然后将新树的节点与相应的实dom对应。 在这里,假设那是第一次渲染。

遇到创建组件的vnode时,将进入组件实例化过程。 此过程与创建vue实例的过程基本相同。 这意味着可以递归循环执行上述步骤,最终将创建的组件实例装载到vnode的componentInstance属性中,以便于重用。

完成这个步骤后,你会在页面上看到一些东西。

运行生命周期钩子函数mounted

重新渲染数据时,依赖于该数据的所有Watcher都会重新运行。 这里只考虑与更新组件函数对应的Watcher

调度程序将Watcher放入nextTick (即微队列)中运行。 这是为了防止多个从属数据同时更改并多次运行。

运行生命周期钩子函数beforeUpdate

重新运行更新组件函数

在运行_render函数的过程中,之前的依赖关系将被移除。 仅考虑v-if的感受,重新收集所有依存关系,并在将来依存关系发生变化时重新运行updateCompontent函数

_updata函数运行时,触发patch函数并比较新旧两棵树。

常规html节点的对比导致组件节点的对比(其中实际节点被创建、删除、移动和更新)导致组件的创建、删除、移动和更新,以及如果需要创建新组件,则在实例化过程中

如果需要删除旧组件,则会调用组件的$destroy方法以触发生命周期挂接函数destroyed

当组件的属性被更新时,对应于组件的updataComponent函数可以重新启动并执行,进入重新渲染过程,然后再次执行重新渲染过程

运行生命周期钩子函数updated

作者:法医学

链接: https://juejin.cn/post/695969978463466318

资料来源:掘金

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。