Vue 的父组件和子组件生命周期钩子函数执行顺序?

184 阅读2分钟

我们来通过一些问题来了解生命周期吧!

一、vue生命周期是什么?

我自己的理解,简单点讲Vue的生命周期就是用来描述一个组件从引入到退出的全部过程。详细点讲就是:Vue 创建 实例化对象,经历了 数据初始化挂载更新 等步骤后,最后被 销毁

二、生命周期钩子函数执行顺序?

  1. 首先是数据加载渲染到页面,包括初始化阶段和挂载阶段

Vue实例化(new Vue())--> 父组件beforeCreate --> 父组件 created --> 父组件 beforeMount --> 子组件 beforeCreate --> 子组件 created --> 子组件 beforeMount --> 真实DOM挂载完毕 --> 子组件 mounted --> 父组件 mounted

  1. 其次当data里的数据发生了变化,进入更新阶段

父组件 beforeUpdate --> 子组件 beforeUpdate --> 子组件 updated --> 父组件 updated --> 获取更新后的真实DOM

  1. 最后当$destroy()被调用进入销毁阶段

父组件 beforeDestroy --> 子组件 beforeDestroy --> 实例销毁后 --> 子组件 destroyed --> 父组件 destroyed

三、每个生命周期钩子都做了什么?

  • beforeCreate – 初始化部分参数,合并相同的参数,生命周期钩子函数被执行
  • created –- 初始化props、data、methods、computed、watch、Inject、Provide,生命周期钩子函数被执行
  • beforeMount –- 判断el属性,存在就渲染dom,生命周期钩子函数被执行
  • mounted –- 实例化 watcher 并渲染dom,生命周期钩子函数被执行
  • beforeUpdate –- 渲染 dom 后,数据更新的时候,生命周期钩子函数被执行
  • updated –- 判断当前是否存在要更新数据的 watcher,存在的话,生命周期钩子函数被执行
  • beforeDestroy –- 检测组件是否被卸载,已经卸载就直接 return 出去,生命周期钩子函数被执行
  • destroyed –- 删除被卸载组件的所有痕迹,生命周期钩子函数被执行

举例其中几个比较长常见的应用场景:

created -- 当我们需要在页面一加载就发送请求,就把请求放在 created 中

beforeDestroy -- 清空定时器

mounted -- 在Vue3中使用了 setup替换了 created,所以当我们需要在页面一加载就发送请求,就得把请求放在 mounted 中