這一段時(shí)間了解了一下微信小程序的生命周期勋颖,小程序的5個(gè)生命周期如下:
- onLoad: 頁(yè)面初始化
- onShow: 頁(yè)面顯示
- onReady: 頁(yè)面渲染完成
- onHide: 頁(yè)面隱藏
- onUnload: 頁(yè)面關(guān)閉
其中只有onLoad這個(gè)函數(shù)是有變量的,變量是由跳轉(zhuǎn)到當(dāng)前頁(yè)面的url中所有的變量組成的一個(gè)object维雇。
這個(gè)生命周期的經(jīng)歷順序舉例來(lái)說(shuō)是這樣的阀圾,以index頁(yè)面為例:
用戶進(jìn)入小程序: onLoad->onShow->onReady
用戶點(diǎn)擊home鍵回城: onHide
用戶再次進(jìn)入微信回到小程序: onShow
用戶點(diǎn)擊返回:onUnload
可以從官方給出的圖來(lái)很好的理解。
理解了生命周期之后,在編程的時(shí)候可能會(huì)遇到這樣的問(wèn)題朝卒。有一個(gè)用戶路徑如下:
用戶點(diǎn)擊評(píng)論,進(jìn)入評(píng)論頁(yè)面
用戶評(píng)論后提交
提交成功后跳回到上一頁(yè)面
上一頁(yè)面成功顯示用戶的評(píng)論
那么在程序中過(guò)程如下:
當(dāng)在A頁(yè)面乐埠,用戶點(diǎn)擊評(píng)論扎运,新的頁(yè)面B開(kāi)啟,A執(zhí)行onHide饮戳,B執(zhí)行onLoad, onShow, onReady.
用戶評(píng)論后提交豪治,B執(zhí)行onUnload, A執(zhí)行onShow
這個(gè)時(shí)候如果需要顯示含有最新的評(píng)論應(yīng)該如何做?在onShow中向后臺(tái)發(fā)送request請(qǐng)求數(shù)據(jù)扯罐。那么會(huì)有這樣的問(wèn)題负拟,當(dāng)用戶初始進(jìn)入該頁(yè)面的時(shí)候,在onLoad和onShow都會(huì)發(fā)送一次request歹河,造成兩次請(qǐng)求和渲染掩浙。而且在onShow中由于無(wú)法獲取url中參數(shù)的內(nèi)容,可能會(huì)造成發(fā)送request失敗秸歧。
我的解決方案是厨姚,首先要在onLoad中將url的參數(shù)存入data中,以便onShow使用键菱。其次是谬墙,在這種情況下需要區(qū)分onShow和onLoad發(fā)送request的時(shí)機(jī),避免二次渲染。
假如需要在A頁(yè)面顯示的內(nèi)容只有B頁(yè)面進(jìn)行操作的數(shù)據(jù)拭抬,不想要在A頁(yè)面重復(fù)發(fā)送request獲取一次數(shù)據(jù)部默,而是從B頁(yè)面將信息傳給A,要如何實(shí)現(xiàn)呢造虎?
微信提供了一種緩存的機(jī)制傅蹂,在B頁(yè)面通過(guò)wx.setStorage將需要傳遞的信息的key和value存入。再在A頁(yè)面通過(guò)wx.getStorage取出算凿,如果不需要繼續(xù)使用該信息的話則可以通過(guò)wx.removeStorage將該信息刪除份蝴。
以上,就是我曾經(jīng)遇到過(guò)的問(wèn)題和解決方案氓轰。如有不妥或者更好的方案搞乏,希望可以給我一個(gè)機(jī)會(huì)跟您一同交流。