我们来通过一些问题来了解生命周期吧!
一、vue生命周期是什么?
我自己的理解,简单点讲Vue的生命周期就是用来描述一个组件从引入到退出的全部过程。详细点讲就是:Vue 创建 实例化对象,经历了 数据初始化 , 挂载 , 更新 等步骤后,最后被 销毁。
二、生命周期钩子函数执行顺序?
- 首先是数据加载渲染到页面,包括初始化阶段和挂载阶段
Vue实例化(new Vue())--> 父组件beforeCreate --> 父组件 created --> 父组件 beforeMount --> 子组件 beforeCreate --> 子组件 created --> 子组件 beforeMount --> 真实DOM挂载完毕 --> 子组件 mounted --> 父组件 mounted
- 其次当data里的数据发生了变化,进入更新阶段
父组件 beforeUpdate --> 子组件 beforeUpdate --> 子组件 updated --> 父组件 updated --> 获取更新后的真实DOM
- 最后当$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 中