欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

微信小程序MoxB實現(xiàn)全局狀態(tài)管理流程詳解

 更新時間:2022年11月30日 14:13:07   作者:花鐺  
這篇文章主要介紹了微信小程序使用MoxB實現(xiàn)全局狀態(tài)管理方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧

github 地址:https://github.com/wechat-miniprogram/mobx-miniprogram-bindings。

安裝 MobX

  • 在小程序根目錄下執(zhí)行 npm install --save mobx-miniprogram mobx-miniprogram-bindings 安裝 mobx-miniprogrammobx-miniprogram-bindings 。
  • 點擊開發(fā)者工具中的菜單欄:工具 --> 構(gòu)建 npm 完成構(gòu)建。

創(chuàng)建 MobX Store

在小程序根目錄下新建 store.js文件,創(chuàng)建 MobX Store。

// store.js
import { observable, action } from "mobx-miniprogram";
export const store = observable({
  // 數(shù)據(jù)字段
  numA: 1,
  numB: 2,
  // 計算屬性
  get sum() {
    return this.numA + this.numB;
  },
  // actions
  updateNumA: action(function () {
    this.numA = 3;
  }),
});

使用 MobX Store

將頁面、自定義組件和 store 綁定有兩種方式: behavior 綁定和手工綁定 。

behavior 綁定:使用 storeBindingsBehavior 這個 behavior 和 storeBindings 定義段。

import { storeBindingsBehavior } from "mobx-miniprogram-bindings";
Component({
  behaviors: [storeBindingsBehavior],
  storeBindings: {
     // 綁定配置
  },
  // 也可以把 storeBindings 設(shè)置為一個數(shù)組,可以同時綁定多個 store
  storeBindings: [
    {
      // 綁定配置 1
    },
    {
      // 綁定配置 2
    },
  ],
})

手工綁定: 使用 createStoreBindings 創(chuàng)建綁定,它會返回一個包含清理函數(shù)的對象用于取消綁定。

在頁面 onUnload 或自定義組件 detached 時一定要調(diào)用清理函數(shù),否則將導(dǎo)致內(nèi)存泄漏。

import { createStoreBindings } from "mobx-miniprogram-bindings";Page({ onLoad() { this.storeBindings = createStoreBindings(this, { // 綁定配置 }); }, onUnload() { this.storeBindings.destroyStoreBindings(); },});import { createStoreBindings } from "mobx-miniprogram-bindings";
Page({
  onLoad() {
    this.storeBindings = createStoreBindings(this, {
      // 綁定配置
    });
  },
  onUnload() {
    this.storeBindings.destroyStoreBindings();
  },
});

無論使用哪種綁定方式,都必須提供一個綁定配置對象。這個對象包含以下字段:

store:一個 MobX observable。用于指定默認的 MobX store。

fields:數(shù)組或?qū)ο?。用于指定需要綁定?data 字段。

fields 有三種形式:

  • 數(shù)組形式:指定 data 中哪些字段來源于 store 。例如 ['numA', 'numB']
  • 映射形式:指定 data 中哪些字段來源于 store 以及它們在 store 中對應(yīng)的名字。例如 { a: 'numA', b: 'numB' } ,此時 this.data.a === store.numA,this.data.b === store.numB
  • 函數(shù)形式:指定 data 中每個字段的計算方法。例如 { a: () => store.numA, b: () => anotherStore.numB } ,此時 this.data.a === store.numAthis.data.b === anotherStore.numB。

actions:數(shù)組或?qū)ο?。用于指定需要映射?actions,將 store 中的一些 actions 放入頁面或自定義組件的 this 下。

actions 有兩種形式:

  • 數(shù)組形式:例如 ['update'] ,此時 this.update === store.update。
  • 映射形式:例如 { buttonTap: 'update' } ,此時 this.buttonTap === store.update。

為了提升性能,在 store 中的字段被更新后,并不會立刻同步更新到 this.data 上,而是等到下個 wx.nextTick 調(diào)用時才更新,這樣可以顯著減少 setData 的調(diào)用次數(shù)。

如果需要立刻更新,可以在 behavior 綁定中調(diào)用 this.updateStoreBindings(),或者在手工綁定中調(diào)用 this.storeBindings.updateStoreBindings()。

如果只是更新對象中的一部分,是不會引發(fā)界面變化的。

例如:this.someObject.someField = "xxx"; 是不會觸發(fā)界面更新的,可以改成this.someObject = Object.assign({}, this.someObject, { someField: "xxx" });。

在 Component 構(gòu)造器中使用

import { storeBindingsBehavior } from "mobx-miniprogram-bindings";
import { store } from "../../store/store";
Component({
  behaviors: [storeBindingsBehavior],
  storeBindings: {
    store,
    fields: {
      numA: "numA",
      numB: "numB",
      sum: "sum",
    },
    actions: {
      updateNumA: "updateNumA",
    },
  },
  methods: {
    myMethod() {
      this.updateNumA()
      wx.nextTick(() => {
        const A = this.data.numA; // 3
        const B = this.data.numB; // 2
        const C = this.data.sum; // 5
      })
    },
  },
});

在 Page 頁面中使用

小程序基礎(chǔ)庫版本 2.9.2 以上,可以直接像 Component 構(gòu)造器那樣引入 behaviors 。

import { createStoreBindings } from "mobx-miniprogram-bindings";
import { store } from "../../store/store";
Page({
  onLoad() {
    this.storeBindings = createStoreBindings(this, {
      store,
      fields: ["numA", "numB", "sum"],
      actions: ["updateNumA"],
    });
    wx.nextTick(() => {
      const A = this.data.numA; // 1
      const B = this.data.numB; // 2
      const C = this.data.sum; // 3
    })
  },
  onUnload() {
    this.storeBindings.destroyStoreBindings();
  },
  myMethod() {
    this.updateNumA()
    wx.nextTick(() => {
      const A = this.data.numA; // 3
      const B = this.data.numB; // 2
      const C = this.data.sum; // 5
    })
  },
})

到此這篇關(guān)于微信小程序MoxB實現(xiàn)全局狀態(tài)管理流程詳解的文章就介紹到這了,更多相關(guān)小程序MoxB全局狀態(tài)管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JS基于Location實現(xiàn)訪問Url、重定向及刷新頁面的方法分析

    JS基于Location實現(xiàn)訪問Url、重定向及刷新頁面的方法分析

    這篇文章主要介紹了JS基于Location實現(xiàn)訪問Url、重定向及刷新頁面的方法,結(jié)合實例形式分析了javascript使用Location進行URL訪問、重定向、頁面刷新等操作相關(guān)原理、操作技巧與注意事項,需要的朋友可以參考下
    2018-12-12
  • Easy.Ajax 部分源代碼 支持文件上傳功能, 兼容所有主流瀏覽器

    Easy.Ajax 部分源代碼 支持文件上傳功能, 兼容所有主流瀏覽器

    下面是Easy.Ajax類的初稿,如須發(fā)表,在代碼上還要修改以達到最簡,但API是不會變了
    2011-02-02
  • js實現(xiàn)課堂隨機點名系統(tǒng)

    js實現(xiàn)課堂隨機點名系統(tǒng)

    這篇文章主要介紹了js實現(xiàn)課堂隨機點名系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • JavaScript?原始包裝類型匯總

    JavaScript?原始包裝類型匯總

    這篇文章主要介紹了JavaScript?原始包裝類型匯總,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • JavaScript對數(shù)字的判斷與處理實例分析

    JavaScript對數(shù)字的判斷與處理實例分析

    這篇文章主要介紹了JavaScript對數(shù)字的判斷與處理方法,實例分析了javascript判斷數(shù)字的常見方法與針對數(shù)字處理的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • 微信小程序原生自定義彈窗效果

    微信小程序原生自定義彈窗效果

    這篇文章主要為大家詳細介紹了微信小程序原生自定義彈窗效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 微信小程序canvas繪制圓角base64圖片的實現(xiàn)

    微信小程序canvas繪制圓角base64圖片的實現(xiàn)

    這篇文章主要介紹了微信小程序canvas繪制圓角base64圖片的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • JS實現(xiàn)在線ps功能詳解

    JS實現(xiàn)在線ps功能詳解

    這篇文章主要介紹了JS實現(xiàn)在線ps功能詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • JavaScript使用canvas繪制隨機驗證碼

    JavaScript使用canvas繪制隨機驗證碼

    這篇文章主要為大家詳細介紹了JavaScript使用canvas繪制隨機驗證碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • antd upload控件的data參數(shù)使用

    antd upload控件的data參數(shù)使用

    這篇文章主要介紹了antd upload控件的data參數(shù)使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評論