还记得刚入职的时候,非常不会描述问题,总是会说在XX之前,在XX之后,现在想来,是对生命周期的概念非常模糊。
从PC端到移动端,从vue到react,熟悉一个新知识前,生命周期总是无法避免的,给学习提供了一个很好的入口。
对于Vue来说,Vue2生命周期钩子函数的总结:
- beforeCreate: 在实例创建之前调用,此时还没有调用 data 选项中定义的数据和 methods 方法。
- created: 实例创建完毕后调用,此时已经完成了以下操作:
- 实例化了一个 new Vue() 对象;
- 通过 options 对象中的 data 属性初始化了数据;
- 通过 options 对象中的 methods 属性初始化了一些方法;
- 执行了 beforeMount 钩子函数。
- beforeMount: 在挂载开始之前调用,相关的 render 函数首次被调用。可以在此时对实例进行渲染。
- mounted: 实例已经挂载到 DOM 上后调用,此时所有的模板都被渲染为真实的 DOM,可以在此时执行与 DOM 相关的操作。
- beforeUpdate: 数据更新后但在 DOM 重新渲染和更新之前调用,可以在此时执行一些准备工作,比如异步请求数据等。 6.updated: 在 DOM 重新渲染和更新后调用,此时所有的变动都已经反映到了 DOM 上,可以在此时执行一些收尾工作。
- beforeDestroy: 在实例销毁之前调用,可以在此时执行一些清理工作,比如取消计时器、移除事件监听器等。
- destroyed: 实例已经销毁后调用,所有的事件监听器和子组件都被移除,可以在此时执行一些善后工作。
对于Vue3,
- beforeCreate 和 created: 在此阶段,组件实例刚被创建,模板编译和渲染的过程还未开始。
- beforeMount 和 mounted: 在此阶段,模板编译已经完成,组件被挂载到DOM上,但是还没有进行首次渲染。
- beforeUpdate 和 updated: 在此阶段,组件已经接收到新的数据并开始更新DOM,但还未完成更新。
- beforeUnmount 和 unmounted: 在此阶段,组件从DOM中卸载,但还未完全卸载。
- onActivated 和 onDeactivated: 这两个钩子函数仅在组件被包含在中时才可用。当组件被激活时,onActivated被调用;当组件被取消激活时,onDeactivated被调用。
- onErrorCaptured: 这个钩子函数在捕获阶段处理组件渲染过程中发生的任何错误。
对于react,个人认为不如vue2那么清楚,以16.3版本为界,分为新旧两个部分 ,
旧版生命周期函数:
1. componentWillMount:在组件即将被挂载到页面的时刻执行,只执行一次。
2. componentDidMount:在组件被挂载到页面之后执行,只执行一次。
3. componentWillReceiveProps:在组件接收到新的props之前执行。
4. ** shouldComponentUpdate**:在组件接收到新的props或者state之后,判断是否需要重新渲染组件,默认返回true。
5. componentWillUpdate:在组件即将被更新之前执行。
6. componentDidUpdate:在组件被更新之后执行。
7. componentWillUnmount:在组件被卸载之前执行。
新版生命周期函数:
1. getDerivedStateFromProps:在组件接收到新的props之后,返回一个新的state值。
2. getSnapshotBeforeUpdate:在组件即将被更新之前执行,可以在此方法中获取更新前的DOM状态。
3. componentDidMount:在组件被挂载到页面之后执行,只执行一次。
4. shouldComponentUpdate:在组件接收到新的props或者state之后,判断是否需要重新渲染组件,默认返回true。
5. componentDidUpdate:在组件被更新之后执行。
6. componentWillUnmount:在组件被卸载之前执行。
对于uniapp,
- onLaunch:应用程序初始化时调用,全局只触发一次。
- onShow:应用程序启动或从后台进入前台时调用。
- onHide:应用程序从前台进入后台时调用。
- onError:应用程序发生错误时调用。
- onPageNotFound:页面不存在时调用。
对于微信小程序, 又会分为组件的生命周期和页面的生命周期,这就非常有意思
对于组件:
- created: 在组件实例刚刚被创建时执行
- attached: 在组件实例进入页面节点树时执行
- ready: 在组件在视图层布局完成后执行
4.** moved:** 在组件实例被移动到节点树另一个位置时执行 - detached: 在组件实例被从页面节点树移除时执行
- error: 每当组件方法抛出错误时执行
对于页面:
- onLoad:页面加载时调用。
- onShow:页面显示时调用。
- onReady:页面初次渲染完成时调用。
- onHide:页面隐藏时调用。
- onUnload:页面卸载时调用。