网友真实露脸自拍10p,成人国产精品秘?久久久按摩,国产精品久久久久久无码不卡,成人免费区一区二区三区

小程序模板網

Westore 發布小程序插件開發模板和其他重大更新及原理

發布時間:2018-10-07 09:25 所屬欄目:小程序開發教程

Westore 開源兩天就突破了 1000 star,還登頂過Github日榜第一名。期間受到了海量關注,收到了大量的中肯和實用的反饋和意見。小程序插件開發的訴求是非常重要的意見之一。所以我馬不停蹄地努力連夜更新,看 Github 提交記錄就知道我凌晨 3 點鐘有合并 PR,也有提交代碼 = =!

 

先回顧一下小程序現有的痛點:

  • 使用 this.data 可以獲取內部數據和屬性值,但不要直接修改它們,應使用 setData 修改
  • setData 編程體驗不好,很多場景直接賦值更加直觀方便
  • setData 卡卡卡慢慢慢,JsCore 和 Webview 數據對象來回傳浪費計算資源和內存資源
  • 組件間通訊或跨頁通訊會把程序搞得亂七八糟,變得極難維護和擴展

所以沒使用 westore 的時候經常可以看到這樣的代碼:

使用 Westore 對編程體驗的改善:

上面兩種方式也可以混合使用。

這里需要特別強調,雖然 this.update 可以兼容小程序的 this.setData 的方式傳參,但是更加智能,this.update 會按需 Diff 或者 透傳給 setData。原理:

 

再舉個例子:

this.store.data.motto = 'Hello Store222'
this.store.data.b.arr.push({ name: 'ccc' })
this.update()
復制代碼
等同于

this.update({
  motto:'Hello Store222',
  [`b.arr[${this.store.data.b.arr.length}]`]:{name:'ccc'}
})
復制代碼

小程序插件

小程序插件是對一組 js 接口、自定義組件或頁面的封裝,用于嵌入到小程序中使用。插件不能獨立運行,必須嵌入在其他小程序中才能被用戶使用;而第三方小程序在使用插件時,也無法看到插件的代碼。因此,插件適合用來封裝自己的功能或服務,提供給第三方小程序進行展示和使用。

插件開發者可以像開發小程序一樣編寫一個插件并上傳代碼,在插件發布之后,其他小程序方可調用。小程序平臺會托管插件代碼,其他小程序調用時,上傳的插件代碼會隨小程序一起下載運行。

  • 插件開發者文檔
  • 插件使用者文檔

插件開發

Westore 提供的目錄如下:

|--components
|--westore	
|--plugin.json	
|--store.js
復制代碼
創建插件:

import create from '../../westore/create-plugin'
import store from '../../store'

//最外層容器節點需要傳入 store,其他組件不傳 store
create(store, {
  properties:{
    authKey:{
      type: String,
      value: ''
    }
  },
  data: { list: [] },
  attached: function () {
    // 可以得到插件上聲明傳遞過來的屬性值
    console.log(this.properties.authKey)
    // 監聽所有變化
    this.store.onChange = (detail) => {
      this.triggerEvent('listChange', detail)
    }
    // 可以在這里發起網絡請求獲取插件的數據
    this.store.data.list = [{
      name: '電視',
      price: 1000
    }, {
      name: '電腦',
      price: 4000
    }, {
      name: '手機',
      price: 3000
    }]

    this.update()

    //同樣也直接和兼容 setData 語法
    this.update(
        { 'list[2].price': 100000 }
    )
  }
})
復制代碼

在你的小程序中使用組件:

<list auth-key="{{authKey}}" bind:listChange="onListChange" />
復制代碼

這里來梳理下小程序自定義組件插件怎么和使用它的小程序通訊:

  • 通過 properties 傳入更新插件,通過 properties 的 observer 來更新插件
  • 通過 store.onChange 收集 data 的所有變更
  • 通過 triggerEvent 來拋事件給使用插件外部的小程序

這么方便簡潔還不趕緊試試 Westore插件開發模板 !

特別強調

插件內所有組件公用的 store 和插件外小程序的 store 是相互隔離的。

原理

頁面生命周期函數

名稱 描述
onLoad 監聽頁面加載
onShow 監聽頁面顯示
onReady 監聽頁面初次渲染完成
onHide 監聽頁面隱藏
onUnload 監聽頁面卸載

組件生命周期函數

名稱 描述
created 在組件實例進入頁面節點樹時執行,注意此時不能調用 setData
attached 在組件實例進入頁面節點樹時執行
ready 在組件布局完成后執行,此時可以獲取節點信息(使用 SelectorQuery )
moved 在組件實例被移動到節點樹另一個位置時執行
detached 在組件實例被從頁面節點樹移除時執行

由于開發插件時候的組件沒有 this.page,所以 store 是從根組件注入,而且可以在 attached 提前注入:

export default function create(store, option) {
    let opt = store
    if (option) {
        opt = option
        originData = JSON.parse(JSON.stringify(store.data))
        globalStore = store
        globalStore.instances = []
        create.store = globalStore
    }

    const attached = opt.attached
    opt.attached = function () {
        this.store = globalStore
        this.store.data = Object.assign(globalStore.data, opt.data)
        this.setData.call(this, this.store.data)
        globalStore.instances.push(this)
        rewriteUpdate(this)
        attached && attached.call(this)
    }
    Component(opt)
}
復制代碼


易優小程序(企業版)+靈活api+前后代碼開源 碼云倉庫:starfork
本文地址:http://www.xiuhaier.com/wxmini/doc/course/24849.html 復制鏈接 如需定制請聯系易優客服咨詢:800182392 點擊咨詢
QQ在線咨詢
AI智能客服 ×