首先,我们需要明确的是,微信小程序的生命周期是由框架管理的。微信小程序的生命周期分为两种,全局生命周期和页面生命周期。全局生命周期是指小程序从启动到销毁期间的生命周期,而页面生命周期是指页面从创建到销毁期间的生命周期。
在全局生命周期中,onLaunch是在小程序启动时触发的,在调用该方法后才会进行路由解析,根据解析结果执行对应的页面生命周期函数。因此,onLaunch方法是异步执行的。
在页面生命周期中,onLoad是在页面创建时触发的,因此它是在onLaunch之后执行的。onLoad的执行顺序也是由路由解析结果所决定的,即哪个页面先创建就先执行哪个页面的onLoad函数。
以下是两个示例来说明这个问题:
- 示例一
现在我们有两个页面,分别是A页面和B页面。A页面的路径为/pages/A/A,B页面的路径为/pages/B/B。我们在小程序启动时进入B页面,如下:
// app.js
App({
onLaunch: function () {
console.log('app onLaunch');
}
})
// pages/B/B.js
Page({
onLoad: function () {
console.log('B onLoad');
}
})
在小程序启动时,控制台输出了'app onLaunch',说明onLaunch方法被调用了。进入B页面时,控制台输出了'B onLoad',说明B页面的onLoad函数在onLaunch之后执行。
- 示例二
现在我们有两个页面,分别是C页面和D页面。C页面的路径为/pages/C/C,D页面的路径为/pages/D/D。我们在小程序启动时进入C页面,C页面中又通过redirectTo跳转到D页面,并在D页面的onLoad函数中输出一个log,如下:
// app.js
App({
onLaunch: function () {
console.log('app onLaunch');
}
})
// pages/C/C.js
Page({
onLoad: function () {
wx.redirectTo({
url: '/pages/D/D',
})
}
})
// pages/D/D.js
Page({
onLoad: function () {
console.log('D onLoad');
}
})
在小程序启动时,控制台输出了'app onLaunch',说明onLaunch方法被调用了。跳转到D页面时,控制台输出了'D onLoad',说明D页面的onLoad函数在C页面的onLoad函数之后执行。
综上所述,虽然onLaunch方法是异步执行的,但是在小程序启动时会先执行onLaunch方法,然后根据路由解析结果执行对应页面的onLoad函数。因此,首页的onLoad函数会在onLaunch方法之后执行。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信小程序onLaunch异步,首页onLoad先执行? - Python技术站