之前在做微信小程序的时候,一直对生命周期里面的onLoad,onShow,onUnload不是很理解。比如说什么时候会触发onUnload。
经过一段时间的测试发现,普通页面的onUnload在三种情况下会触发。
- 某一个页面跳转到tabBar页面,根据小程序文档介绍,当跳转到tabBar页面的时候会卸载其他非tabBar页面。
- 当前页点击回退按钮回退到上一个页面,此时当前页也会触发onUnload。
- A页面redirect跳转至某一页面,A页面触发onUnload。并且返回键跳转至A页面的上一页。
其次是当跳转到其他非tabBar页面的时候,并且未触发onUnload,但是每次进入页面都相当于重新打开了一个页面,数据不能从data中同步。
例如A页面为tabBar页面,B页面C页面是非tabBar页面。从A页面进入B页面,B页面执行onLoad,从B页面进入C页面,B页面并不会执行onUnload,从C页面进入A页面,B页面C页面都会执行onUnload。
又比如,从A页面进入B页面,并改变B页面的数据,从B页面进入C页面,然后从C页面进入B页面,数据还是走的之前的逻辑,因为此时我们相当于重新打开了一个B页面。但是如果此时我们通过返回操作进入B页面的话,那么B页面的数据还是之前保留下来的,因为通过返回键进入的还是之前的页面。
onShow对应的是onHide,一个是当页面显示的时候,一个是当页面隐藏的时候。
此时需要注意的是,当从其他页面进入当前页面的时候,onLoad和onShow会依此执行,但是当使用返回键返回到当前页面的时候,只会执行onShow。
tabBar页面的onUnload需要使用redirect触发,需要注意的是,从tabBar页面redirect进入某一页面,该页面原生返回键将被默认隐藏。