一、微信生命周期
taro是以react为基础的多端混合开发工具,使用 Taro,我们可以只书写一套代码,再通过 Taro 的编译工具,将源代码分别编译出可以在不同端(微信 / 京东 / 百度 / 支付宝 / 字节跳动 小程序、快应用、H5、React-Native 等)运行的代码。taro的生命周期不仅包含了react的相关钩子函数,还包括兼容微信小程序的而设置的钩子函数,所以在学习taro的生命周期之前,先了解一下微信的生命周期。 微信的生命周期可分为应用生命周期、页面生命周期和组件生命周期。
1.1 应用生命周期
他们的触发属于小程序应用本身,也就 代表着和用户在哪个页面没有关系,换句话说,用户在任何一个页面都可以触发;
参考微信开发文档
- onLaunch 小程序初始化完成时触发,全局只触发一次。
- onShow 小程序启动,或从后台进入前台显示时触发。
- onHide 小程序从前台进入后台时触发。
- 用户首次打开小程序,触发 onLaunch(全局只触发一次)。
- 小程序初始化完成后,触发onShow方法,监听小程序显示。
- 小程序从前台进入后台,触发 onHide方法。
- 小程序从后台进入前台显示,触发 onShow方法。
- 小程序后台运行一定时间,或系统资源占用过高,会被销毁。
前台、后台定义: 当用户点击左上角关闭,或者按了设备 Home 键离开微信,小程序并没有直接销毁,而是进入了后台;当再次进入微信或再次打开小程序,又会从后台进入前台。
1.2 页面生命周期
它写的位置在每个页面里面,不在app.js里,因为它是 属于页面级 的,这些页面级的生命周期都是当页面被打开,离开,显示等等才会被触发;
微信开发文档中页面生命周期的图
可以看到,微信的页面生命周期包括:
- onLoad 页面加载时触发。
- onShow 页面载入后触发。
- onReady 首次显示页面,会触发onReady方法,渲染页面元素和样式,一个页面只会调用一次。
- onHide 小程序后台运行或跳转到其他页面时,触发onHide方法。
- onUnload 当使用重定向方法wx.redirectTo或关闭当前页返回上一页wx.navigateBack,触发onUnload。
应用生命周期影响页面生命周期:
- 小程序初始化完成后,页面首次加载触发onLoad,只会触发一次。
- 当小程序进入到后台,先执行页面onHide方法再执行应用onHide方法。
- 当小程序从后台进入到前台,先执行应用onShow方法再执行页面onShow方法。
1.3 页面生命周期
官网介绍的原话是:指的是组件自身的一些函数,这些函数在特殊的时间点或遇到一些特殊的框架事件时被自动触发。大概意思就是,我们知道生命周期指的是从加载到销毁这个过程,在这个过程中可以分为好多阶段,比如,创建阶段,挂载阶段,销毁阶段等等,在每个阶段程序内部都会向外抛出一个回调函数,这个回调函数,就是生命周期;
参考微信开发文档
二、React的生命周期
可以看我之前写的一篇文章:生命周期与Diff算法
componentWillMount() {
console.log('生命周期回调—监听页面加载');
}
componentDidMount() {
console.log('生命周期回调—监听页面初次渲染完成')
}
shouldComponentUpdate() {
console.log('页面是否需要更新')
}
componentWillUpdate() {
console.log('页面即将更新')
}
componentDidUpdate() {
console.log('页面更新完毕')
}
componentWillUnmount() {
console.log('生命周期回调—监听页面卸载')
}
三、Taro中的生命周期
| 生命周期 | 描述 | 可用位置 |
|---|---|---|
| onLaunch | 在小程序环境中对应 app 的 onLaunch | 入口组件 |
| componentDidShow | 程序/页面,启动或切前台时触发。在小程序环境中对应页面的 onShow | 入口组件、页面组件 |
| onShow | 页面,启动或切前台时触发 | 页面组件 |
| componentDidHide | 程序/页面,切后台或隐藏时触发;在小程序环境中对应页面的 onHide | 入口组件、页面组件 |
| onHide | 页面,隐藏或切后台时触发 | 页面组件 |
| onLoad | 在小程序环境中对应页面的 onLoad | 页面组件 |
| onReady | 在小程序环境中对应页面的 onReady | 页面组件 |
| componentWillMount | 页面将要挂载时触发,第⼀次渲染之前执⾏,只执⾏⼀次 | 入口组件、页面组件 |
| componentDidMount | 页面挂载之后触发 ,第⼀次渲染之后执⾏,只执⾏⼀次 | 入口组件、页面组件 |
| shouldComponentUpdate | 页面props/state修改时触发,应返回boolean类型,决定是否触发页面重新render | 入口组件、页面组件 |
| componentDidUpdate | 页面重新render后触发 (state中数据将更新完成之后触发) | 入口组件、页面组件 |
| componentWillUnMount | 页面将要卸载时触发 | 入口组件、页面组件 |
可以看到,Taro中的生命周期,包含了小程序和React的生命周期。
重要: