【查看原文】html
小程序分爲應用、頁面和組件三個部分,因此小程序的生命週期涉及如下:前端
App()
函數用來註冊一個小程序。接受一個 Object
參數,其指定小程序的生命週期回調等。App()
必須在 app.js
中調用,必須調用且只能調用一次。react
App({
onLaunch: function(options) { // 監聽小程序初始化。小程序初始化完成時(全局只觸發一次) }, onShow: function(options) { // 監聽小程序顯示。小程序啓動,或從後臺進入前臺顯示時 }, onHide: function() { // 監聽小程序隱藏。小程序從前臺進入後臺時。 }, onError: function(msg) { console.log(msg) // 錯誤監聽函數。小程序發生腳本錯誤,或者 api 調用失敗時觸發,會帶上錯誤信息 }, onPageNotFound: function(res) { // 頁面不存在監聽函數。小程序要打開的頁面不存在時觸發,會帶上頁面信息回調該函數 }, globalData: 'I am global data' })
前臺、後臺定義: 當用戶點擊左上角關閉,或者按了設備 Home 鍵離開微信,小程序並無直接銷燬,而是進入了後臺;當再次進入微信或再次打開小程序,又會從後臺進入前臺。git
咱們來看圖:應用生命週期github
全局的 getApp()
函數能夠用來獲取到小程序 App
實例。sql
// other.js var appInstance = getApp() console.log(appInstance.globalData) // I am global data
注意:json
Page(Object)
函數用來註冊一個頁面。接受一個 Object
類型參數,其指定頁面的初始數據、生命週期回調、事件處理函數等。小程序
//index.js Page({ data: { // 頁面的初始數據 text: "This is page data." }, onLoad: function(options) { // 生命週期回調—監聽頁面加載 }, onReady: function() { // 生命週期回調—監聽頁面初次渲染完成 }, onShow: function() { // 生命週期回調—監聽頁面顯示 }, onHide: function() { // 生命週期回調—監聽頁面隱藏 }, onUnload: function() { // 生命週期回調—監聽頁面卸載 }, onPullDownRefresh: function() { // 監聽用戶下拉動做 }, onReachBottom: function() { // 頁面上拉觸底事件的處理函數 }, onShareAppMessage: function () { // 用戶點擊右上角轉發 }, onPageScroll: function() { // 頁面滾動觸發事件的處理函數 }, onResize: function() { // 頁面尺寸改變時觸發 }, onTabItemTap(item) { // 當前是 tab 頁時,點擊 tab 時觸發 console.log(item.index) console.log(item.pagePath) console.log(item.text) }, // 任意的函數,在頁面的函數中用 this 能夠訪問 viewTap: function() { this.setData({ text: 'Set some data for updating view.' }, function() { // this is setData callback }) }, // 任意數據,在頁面的函數中用 this 能夠訪問 customData: { hi: 'MINA' } })
咱們來看圖:頁面生命週期微信小程序
總結api
onLoad
: 頁面加載。一個頁面只會調用一次。參數能夠獲取wx.navigateTo
和wx.redirectTo
及<navigator/>
中的 query
。onShow
: 頁面顯示。每次打開頁面都會調用一次。onReady
: 頁面初次渲染完成。一個頁面只會調用一次,表明頁面已經準備穩當,能夠和視圖層進行交互。對界面的設置如wx.setNavigationBarTitle
請在onReady
以後設置。onHide
: 頁面隱藏。當navigateTo
或底部tab
切換時調用。onUnload
: 頁面卸載。當redirectTo
或navigateBack
的時候調用。Page 實例的生命週期
咱們來看圖:實例生命週期
小程序由兩大線程組成:負責界面的視圖線程(view thread)和負責數據、服務處理的服務線程(appservice thread),二者協同工做,完成小程序頁面生命週期的調用。
視圖線程有四大狀態:
服務線程五大狀態:
另: 寫過react的童鞋都知道,react 中使用了 will、 did、should 等一系列有時態語義的詞彙命名鉤子函數。小程序中,統一使用on,那麼on是在行爲前仍是行爲後,從實例生命週期圖中,咱們能夠明顯看到:鉤子觸發執行時機都是在事件完成以後觸發的。例如
set to background
以後onHode
。
組件的生命週期,指的是組件自身的一些函數,這些函數在特殊的時間點或遇到一些特殊的框架事件時被自動觸發。
其中,最重要的生命週期是 created attached detached ,包含一個組件實例生命流程的最主要時間點。
組件所在頁面的生命週期, 指的是那些並不是與組件有很強的關聯,但有時組件須要獲知,以便組件內部處理的生命週期,在 pageLifetimes 定義段中定義。
Component({
lifetimes: { created() { // 在組件實例剛剛被建立時執行 }, attached() { // 在組件實例進入頁面節點樹時執行 }, ready() { // 在組件在視圖層佈局完成後執行 }, moved() { // 在組件實例被移動到節點樹另外一個位置時執行 }, detached() { // 在組件實例被從頁面節點樹移除時執行 }, error(err) { // 每當組件方法拋出錯誤時執行 } }, pageLifetimes: { show() { // 頁面被展現 }, hide() { // 頁面被隱藏 }, resize(size) { // 頁面尺寸變化 } }, // 如下是舊式的定義方式,能夠保持對 <2.2.3 版本基礎庫的兼容 attached() { // 在組件實例進入頁面節點樹時執行 }, detached() { // 在組件實例被從頁面節點樹移除時執行 }, // ... })
咱們來看圖:應用生命週期影響頁面生命週期
app onLaunch app onShow component created component attached page onLoad {id: "test"} component show page onShow component ready page onReady page onUnload component detached app onHide
app onLaunch app onShow component created component attached page onLoad {id: "test"} component show page onShow component ready page onReady page onUnload component detached app onHide
----------------------------------------
小程序系列:
基礎使用: component使用 、 wxs使用 、 節點操做 、 頁面跳轉 、 緩存
----------------------------------------