Taro的生命周期

2,234 阅读4分钟

一、微信生命周期

taro是以react为基础的多端混合开发工具,使用 Taro,我们可以只书写一套代码,再通过 Taro 的编译工具,将源代码分别编译出可以在不同端(微信 / 京东 / 百度 / 支付宝 / 字节跳动 小程序、快应用、H5、React-Native 等)运行的代码。taro的生命周期不仅包含了react的相关钩子函数,还包括兼容微信小程序的而设置的钩子函数,所以在学习taro的生命周期之前,先了解一下微信的生命周期。 微信的生命周期可分为应用生命周期、页面生命周期和组件生命周期。

Snipaste_2022-08-04_11-48-13.png

1.1 应用生命周期

他们的触发属于小程序应用本身,也就 代表着和用户在哪个页面没有关系,换句话说,用户在任何一个页面都可以触发

参考微信开发文档

  • onLaunch 小程序初始化完成时触发,全局只触发一次。
  • onShow 小程序启动,或从后台进入前台显示时触发。
  • onHide 小程序从前台进入后台时触发。
  1. 用户首次打开小程序,触发 onLaunch(全局只触发一次)。
  2. 小程序初始化完成后,触发onShow方法,监听小程序显示。
  3. 小程序从前台进入后台,触发 onHide方法。
  4. 小程序从后台进入前台显示,触发 onShow方法。
  5. 小程序后台运行一定时间,或系统资源占用过高,会被销毁。

前台、后台定义: 当用户点击左上角关闭,或者按了设备 Home 键离开微信,小程序并没有直接销毁,而是进入了后台;当再次进入微信或再次打开小程序,又会从后台进入前台。

1.2 页面生命周期

它写的位置在每个页面里面,不在app.js里,因为它是 属于页面级 的,这些页面级的生命周期都是当页面被打开,离开,显示等等才会被触发;

微信开发文档中页面生命周期的图

image.png 可以看到,微信的页面生命周期包括:

  • onLoad 页面加载时触发。
  • onShow 页面载入后触发。
  • onReady 首次显示页面,会触发onReady方法,渲染页面元素和样式,一个页面只会调用一次。
  • onHide 小程序后台运行或跳转到其他页面时,触发onHide方法。
  • onUnload 当使用重定向方法wx.redirectTo或关闭当前页返回上一页wx.navigateBack,触发onUnload。

应用生命周期影响页面生命周期:

Snipaste_2022-08-04_12-00-50.png

  1. 小程序初始化完成后,页面首次加载触发onLoad,只会触发一次。
  2. 当小程序进入到后台,先执行页面onHide方法再执行应用onHide方法。
  3. 当小程序从后台进入到前台,先执行应用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的生命周期。

重要: