父组件和子组件的生命周期触发顺序是?

在这里插入图片描述

1、生命周期

    • beforeCreate: 在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用
    • created:实例创建完成之后立马触发的钩子函数。实例已完成以下的配置:数据观测(data observer),属性和方法的运算, watch/event 事件回调。在beforeCreate之后开始监听data数据变化情况。
    • beforeMount:在created之后,开始编译模板,将data里的数据和vue语法写的模板编译成html;开始挂载编译生成的HTML到对应的位置时触发beforeMount钩子函数,相关的 render 函数首次被调用
    • mounted:挂载到页面完成后触发mounted钩子函数,此时可以进行发送Ajax请求获取数据的操作。mounted 不会保证所有的子组件也都一起被挂载mounted在整个实例生命内只执行一次
    • beforeUpdate: 数据更新时调用,发生在虚拟 DOM 打补丁之前
    • updated: 由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。updated 不会保证所有的子组件也都一起被重绘。如果希望等到整个视图都重绘完毕,可以在 updated 里使用 vm.$nextTick。
    • activated:keep-alive 组件激活时调用
    • deactivated:keep-alive 组件停用时调用
    • beforeDestroy:实例销毁之前调用。在这一步,实例仍然完全可用
    • destroyed:该钩子被调用后,对应 Vue 实例的所有指令都被解绑,所有的事件监听器被移除,所有的子实例也都被销毁

自己描述:在vue实例被初始化之后,触发beforeCreate钩子函数,然后开始进行数据观测和事件配置;实例创建完成之后立马触发created钩子函数,此时已经配置好数据观测和属性以及方法;之后开始编译模板,将data里的数据和vue语法写的模板编译成HTML,开始挂载HTML到对应的位置时触发beforeMount钩子函数,相关的render函数也首次被调用;当挂载到页面完成后触发mounted钩子函数;当数据发生更新时,触发beforeUpdate钩子函数,然后虚拟DOM开始重新渲染和打补丁,完成之后触发updated钩子函数;在实例销毁前触发beforeDestroy钩子函数,此时实例还可用,然后开始移除事件监听器,销毁子实例等等,完成之后触发destroyed。

  1. created和mounted区别:参考:Vue生命周期中mounted和created的区别

    • created: 在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图。此时操作DOM节点,找不到相应元素。
    • mounted: 在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作。
    • 加载渲染过程:父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount->子mounted->父mounted
    • 子组件更新过程:父beforeUpdate->子beforeUpdate->子updated->父updated
    • 父组件更新过程:父beforeUpdate->父updated
    • 销毁过程: 父beforeDestroy->子beforeDestroy->子destroyed->父destroyed
  2. 所有的生命周期钩子自动绑定this上下文到实例中,所以不能使用箭头函数来定义一个生命周期方法

参考:vue生命周期中的钩子函数及父子组件的执行顺序
vue在哪个勾子中发ajax请求

猜你喜欢

转载自blog.csdn.net/weixin_43912756/article/details/108436157