最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

微信小程序?qū)崿F(xiàn)全局狀態(tài)管理的方法整理

 更新時間:2023年06月06日 10:09:37   作者:業(yè)務(wù)崽  
已知微信小程序中如果要做到全局狀態(tài)共享,常用的有四種方式,分別是globalData、本地緩存、mobx-miniprogram和westore,本文將帶大家看看mobx-miniprogram是如何實現(xiàn)的小程序的全局狀態(tài)管理,需要的可以收藏一下

一、前言

在本文開始前請大家先想想在微信小程序中如果要做到全局狀態(tài)共享有幾種實現(xiàn)方式?

在這里給大家列舉幾種目前已知的方式:

globalData

本地緩存

mobx-miniprogram

westore

globalData和緩存應(yīng)該是大家比較熟悉的,但這二者會隨著項目的不斷迭代逐漸變的混亂和不易維護(hù)。

所以針對此種情況mobx-miniprogramwestore應(yīng)運而生。因前段時間公司項目剛好用到了mobx-miniprogram,所以借著公司的業(yè)務(wù)場景本文就展開講一講mobx-miniprogram,看看mobx-miniprogram是如何實現(xiàn)的小程序的全局狀態(tài)管理。

如理解有誤,歡迎評論糾正~

二、使用

mobx-miniprogram 的功能其實非常純粹與簡單,就是創(chuàng)建一個 store。但將 store 的數(shù)據(jù)映射到頁面或組件時,就需要 mobx-miniprogram-bindings 庫,它類似 react-redux,用于連接 store 與頁面/組件的橋梁。

官方代碼片段:代碼片段

第一步:安裝包文件

npm install --save mobx-miniprogram mobx-miniprogram-bindings
yarn add mobx-miniprogram mobx-miniprogram-bindings

第二步:構(gòu)建npm

微信開發(fā)者工具---> 工具---> 構(gòu)建npm

第三步:創(chuàng)建MobX Store

新建一個js文件,這里我們以購物車為例。

我們需全局共享購物車內(nèi)的商品的狀態(tài)、數(shù)量,做到一處修改全局變化。

import { observable, action } from 'mobx-miniprogram'

從 mobx-miniprogram 包中導(dǎo)入 observable 和 action 兩個方法。

  • observable: 用于創(chuàng)建 store 的實例對象
  • action: 用于包裹修改 store 數(shù)據(jù)的函數(shù)
// 創(chuàng)建實例對象
export const chat = observable({
    // 定義兩個全局參數(shù)
    chatList: [], // 購物車商品
    totalPrice: 0, // 購物車商品總價
    // 初始化購物車
    initChat: action(function (list) {
        this.chatList = list
    }),
    // 修改價格
    setPrice: action(function (price) {
        this.totalPrice = price
    }),
})

第四步 使用、更新store

store的應(yīng)用,在page和component中是兩種不同的方式

page

在page頁面使用,我們需要用到 mobx-miniprogram-bindings 用于連接 store 與page頁面

// 從 mobx-miniprogram-bindings 包中導(dǎo)入?`createStoreBindings`?方法
import { createStoreBindings } from "mobx-miniprogram-bindings"
import chat from "../../models/chat"
Page({
   // onLoad 生命周期鉤子中使用createStoreBindings,把指定 store 中的數(shù)據(jù)字段和更新函數(shù)映射到當(dāng)前頁面
    onLoad() {
        this.chatStore = createStoreBindings(this, {
          store: chat,
          fields: ['chatList', 'totalPrice'],
          actions: ['initChat']
        })
      },
      // 
      fu() {
        let chat = [
            {
                name: 'XXXX',
                price: '111'
            },
            {
                name: 'XXXX',
                price: '111'
            }
        ]
        this.initChat(chat)
      },
      // 頁面卸載時,銷毀當(dāng)前頁面的 store 綁定
      onUnload() {
        this.chatStore.destroyStoreBindings();
      }
    })

createStoreBindings 方法調(diào)用會返回一個包含 updateStoreBindings,destroyStoreBindings 兩個函數(shù)的對象,并且賦值給了當(dāng)前頁面實例的 storeBindings 屬性。

所以,當(dāng)頁面卸載(onUnload)時,調(diào)用 destroyStoreBindings 銷毀當(dāng)前頁面的 store 綁定,避免造成內(nèi)存泄露

在組件中使用、更新 store

與在頁面使用 store 方式不同,在組件中要結(jié)合 behaviors(類似 Vue 中的混入)方式。

從 mobx-miniprogram-bindings 包中導(dǎo)入 storeBindingsBehavior 方法,并在組件選項中定義 storeBindings 字段。

import { storeBindingsBehavior } from "mobx-miniprogram-bindings"
import chat from "../../models/chat"
Component({
   behaviors: [storeBindingsBehavior],
   storeBindings: {
      store: chat,
      fields: ['totalPrice'],
      actions: ['setPrice']
   },
   methods: {
     fn() {
       this.setPrice(666)
     }
   }
})

也可以把 storeBindings 設(shè)置為一個數(shù)組,這樣可以同時綁定多個 store 

import { storeBindingsBehavior } from "mobx-miniprogram-bindings";
Component({
  behaviors: [storeBindingsBehavior],
  storeBindings: [
    {
      /* 綁定配置 1 */
    },
    {
      /* 綁定配置 2 */
    },
  ],
});

三、延遲更新與立即更新

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

如果需要立刻更新,可以調(diào)用:

  • this.updateStoreBindings() 在組件中
  • this.storeBindings.updateStoreBindings() 在頁面中
this.setPrice(666)
this.storeBindings.updateStoreBindings()
console.log(this.data.totalPrice)

四、store 劃分模塊

隨著項目越大,功能越豐富,項目模塊的狀態(tài)也越多,為了防止在一個 store 中堆積其他模塊的狀態(tài),可根據(jù)功能模塊或職責(zé)劃分多個 store。

比如在 store 目錄下劃分以下模塊:

  • userStore.js
  • cartStore.js
  • orderStore.js

頁面或組件中需要使用和更新哪些 store 模塊的狀態(tài),就導(dǎo)入指定的 store 模塊,作為 store 字段傳遞給 createStoreBindings 或 storeBindingsBehavior 即可。

    createStoreBindings(this, {store: xxx})
    storeBindings: {
      store: xxx,
    }

以上就是微信小程序?qū)崿F(xiàn)全局狀態(tài)管理的方法整理的詳細(xì)內(nèi)容,更多關(guān)于小程序全局狀態(tài)管理的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • js對象淺拷貝和深拷貝詳解

    js對象淺拷貝和深拷貝詳解

    這篇文章主要為大家詳細(xì)介紹了JavaScript對象的淺拷貝和深拷貝代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 淺析JavaScript的幾種Math函數(shù),random(),ceil(),round(),floor()

    淺析JavaScript的幾種Math函數(shù),random(),ceil(),round(),floor()

    本文主要對JavaScript的幾種Math函數(shù),random(),ceil(),round(),floor()的作用進(jìn)行簡要解析,具有很好的參考價值,需要的朋友一起來看下吧
    2016-12-12
  • javascript禁止超鏈接跳轉(zhuǎn)的方法

    javascript禁止超鏈接跳轉(zhuǎn)的方法

    這篇文章主要介紹了javascript禁止超鏈接跳轉(zhuǎn)的方法,結(jié)合實例分析了JavaScript事件機(jī)制與鼠標(biāo)事件的響應(yīng)操作技巧,需要的朋友可以參考下
    2016-02-02
  • javascript操作cookie方法函數(shù)集合

    javascript操作cookie方法函數(shù)集合

    很多朋友需要使用到cookies操作,腳本之家以前也發(fā)表了不少相關(guān)的文章。這篇文章,雖然亂了點,但知識點比較多。
    2010-07-07
  • JS+CSS簡單樹形菜單實現(xiàn)方法

    JS+CSS簡單樹形菜單實現(xiàn)方法

    這篇文章主要介紹了JS+CSS簡單樹形菜單實現(xiàn)方法,涉及JavaScript結(jié)合css動態(tài)操作頁面元素結(jié)點的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • uniapp如何實現(xiàn)tabBar之間傳參

    uniapp如何實現(xiàn)tabBar之間傳參

    這篇文章主要給大家介紹了關(guān)于uniapp如何實現(xiàn)tabBar之間傳參的相關(guān)資料,文中通過代碼示例介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-08-08
  • 微信小程序?qū)崿F(xiàn)身份證取景框拍攝

    微信小程序?qū)崿F(xiàn)身份證取景框拍攝

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)身份證取景框拍攝,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • JavaScript文件中使用JSX的方法步驟

    JavaScript文件中使用JSX的方法步驟

    本文主要介紹了JavaScript文件中使用JSX的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-12-12
  • WEB前端實現(xiàn)裁剪上傳圖片功能

    WEB前端實現(xiàn)裁剪上傳圖片功能

    文件上傳功能在各大網(wǎng)站經(jīng)常會用到,今天小編通過本文給大家介紹了WEB前端實現(xiàn)裁剪上傳圖片功能的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • JS如何獲取指定范圍內(nèi)的隨機(jī)數(shù)含小數(shù)

    JS如何獲取指定范圍內(nèi)的隨機(jī)數(shù)含小數(shù)

    這篇文章主要介紹了JS如何獲取指定范圍內(nèi)的隨機(jī)數(shù)含小數(shù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12

最新評論

龙胜| 永和县| 沈阳市| 平南县| 阿巴嘎旗| 天峻县| 朔州市| 怀化市| 久治县| 镇平县| 内黄县| 上思县| 天全县| 镇平县| 东辽县| 南乐县| 密山市| 和顺县| 含山县| 鄂托克旗| 岳池县| 乐清市| 福海县| 沙洋县| 五台县| 康马县| 太仓市| 柘荣县| 碌曲县| 万载县| 措美县| 大宁县| 塔城市| 南康市| 隆昌县| 通辽市| 上杭县| 江都市| 太湖县| 萝北县| 新建县|