小程序學習筆記:使用 MobX 實現全局數據共享,實例創建、計算屬性與 Actions 方法

在小程序開發過程中,組件間的數據共享是一個常見且關鍵的問題。今天,我們就來深入探討一下如何在小程序中實現全局數據共享,借助?MobX?相關的包,讓數據管理變得更加高效便捷。

什么是全局數據共享

全局數據共享,也被稱為狀態管理,主要用于解決組件或頁面之間的數據共享難題。在實際開發場景里,如果不使用全局數據共享機制,當我們需要在不同組件或頁面間傳遞數據時,操作會非常繁瑣。例如,從一個子組件向多層上級組件傳遞數據,需要逐層傳遞,這不僅增加了代碼的復雜性,還容易出錯。

而引入全局數據共享后,一切都變得簡單起來。我們可以借助一個 “store”(數據倉庫)來存儲所有需要共享的數據。無論哪個組件或頁面需要使用這些數據,直接從 store 中獲取即可;如果要共享新的數據,直接在組件或頁面中往 store 里掛載就行,無需再在各個組件或頁面之間層層傳遞數據。

在眾多開發框架中,不同框架有各自推薦的數據共享方案。比如在 Vue 項目里,通常推薦使用 Vuex 進行全局數據共享;在 React 項目中,Redux、MobX 等都是常用的方案 。

小程序中的全局數據共享方案

在小程序開發中,我們可以利用mobx-mini-programmobx-mini-program-bindings這兩個包來實現全局數據共享。這兩個包分工明確,相互配合,共同完成數據共享的功能。

  • mobx-mini-program:它的主要職責是創建 store 實例對象。通過這個包,我們能夠創建一個全局的數據共享池 ——store,在其中存儲需要共享的數據,并且還可以定義一些方法,用于修改 store 里的數據。
  • mobx-mini-program-bindings:這個包就像是一座橋梁,負責將 store 里面的共享數據和方法,綁定到組件或頁面中,讓組件或頁面能夠方便地使用這些數據和調用相關方法。

在小程序中安裝 MobX 相關的包

接下來,我們詳細介紹一下在小程序項目中安裝這兩個包的具體步驟。

  1. 安裝命令及版本指定:在項目目錄中,運行以下命令進行安裝:
npm install mobx-mini-program@4.13.2 mobx-mini-program-bindings@1.2.1 --save

這里要特別注意,包名較長,輸入時務必仔細,避免出錯。同時,指定版本號可以確保項目的穩定性,避免因包的版本更新導致兼容性問題。
2. 安裝后的構建操作:安裝完成后,還不能直接在小程序中使用這兩個包,因為還需要進行構建操作。首先,刪除mini_program_npm目錄。你可以在項目目錄中找到該目錄,右鍵點擊選擇 “刪除” 并移動到回收站。
刪除完成后,在微信開發者工具中,點擊 “工具” 菜單里的 “構建 npm” 選項,重新進行構建。構建完成后,在項目根目錄下會生成一個mini_program_npm文件夾,里面就包含了我們剛剛安裝的mobx相關的兩個包。

下面,我們通過一段簡單的代碼示例,來看看如何在小程序中使用這兩個包進行數據共享。

示例代碼
  1. 創建 store 實例(使用mobx-mini-program:在項目的store文件夾下,創建一個index.js文件,代碼如下:
import { makeObservable, observable, action } from 'mobx-mini-program';class Store {constructor() {// 定義共享數據this.sharedData = 0;// 使數據可觀察makeObservable(this, {sharedData: observable,// 定義修改數據的方法updateSharedData: action});}// 修改共享數據的方法updateSharedData = (newValue) => {this.sharedData = newValue;}
}// 創建store實例
const store = new Store();
export default store;
  1. 在頁面中使用 store 數據和方法(使用mobx-mini-program-bindings:在頁面的js文件中,引入并使用 store,代碼如下:

收起

javascript

import { createPage } from'mobx-mini-program-bindings';
import store from '../../store/index';createPage({// 映射store中的數據到頁面mapStateToProps: (store) => ({sharedData: store.sharedData}),// 映射store中的方法到頁面mapActionsToProps: (store) => ({updateSharedData: store.updateSharedData}),onLoad() {// 頁面加載時,打印共享數據console.log(this.data.sharedData);// 修改共享數據this.updateSharedData(10);console.log(this.data.sharedData);}
});

在上述代碼中,我們首先創建了一個Store類,定義了共享數據sharedData和修改數據的方法updateSharedData。然后在頁面中,通過mobx-mini-program-bindings的createPage方法,將 store 中的數據和方法映射到頁面中,方便在頁面中使用。

============================================================

在微信小程序開發過程中,狀態管理是一個至關重要的環節。MobX 作為一種狀態管理庫,為小程序開發提供了便捷高效的狀態管理方案。今天,就讓我們一起深入學習在微信小程序項目中,如何創建 MobX 的 store 實例,定義計算屬性以及使用 Actions 方法修改 store 中的數據。

創建 MobX Store 實例

項目結構搭建

首先,我們需要在項目根目錄下創建一個名為store的文件夾,這個文件夾專門用于存放所有與 MobX 相關的 js 文件。接著,在store文件夾中新建一個store.js文件,這個文件將承擔創建 store 實例對象的重任。

代碼實現

store.js文件中,我們通過以下步驟來創建 store 實例:

  1. 導入必要的包:使用 ES6 的按需導入語法,從mobx-miniprogram包中導入observable方法。這個方法是創建 store 實例的關鍵工具。
import { observable } from 'mobx-miniprogram';
  1. 創建 store 實例并導出:調用observable方法,并傳入一個配置對象。該方法的返回值就是我們需要的 store 實例對象。然后,使用 ES6 的導出語法將其導出,方便其他模塊使用。
const store = observable({// 這里可以初始化共享數據numberA: 1,numberB: 2
});export default store;

在上述代碼中,我們不僅創建了 store 實例,還初始化了兩個共享數據numberAnumberB,分別賦值為 1 和 2。這樣,其他模塊在導入這個 store 實例后,就可以直接使用這些共享數據了。

定義計算屬性

在小程序的 store 中,計算屬性是一種非常實用的功能。它的值依賴于其他數據的變化,當依賴的數據發生改變時,計算屬性會自動重新計算。

計算屬性的概念與應用場景

假設我們有兩個共享數據numberAnumberB,現在我們希望得到這兩個數字的和。這種情況下,定義一個計算屬性sum就非常合適。sum的值會隨著numberAnumberB的變化而自動更新。

代碼實現

store.js文件中,我們按照以下方式定義計算屬性:

  1. 定義計算屬性方法:定義一個方法,方法名即為計算屬性的名字。在這個方法前加上get修飾符,表明這個計算屬性是只讀的,其值會根據依賴數據自動計算,無需手動賦值。
const store = observable({numberA: 1,numberB: 2,get sum() {return this.numberA + this.numberB;}
});

在上述代碼中,sum就是我們定義的計算屬性。在其方法內部,通過return返回numberAnumberB相加的結果。這樣,當其他模塊訪問store.sum時,就能得到最新的計算結果。

定義 Actions 方法修改 Store 數據

為了保證數據的安全性和可維護性,我們不允許外界直接修改 store 中的數據,而是通過定義 Actions 方法來實現數據的修改。

Actions 方法的作用與原理

Actions 方法就像是 store 的 “守護者”,外界只能通過調用這些方法來間接修改 store 中的數據。例如,我們可以定義updateNumber1方法專門用來修改numberA字段的值,updateNumber2方法專門用來修改numberB字段的值。

代碼實現

store.js文件中,定義 Actions 方法的步驟如下:

  1. 導入 action 方法:從mobx-miniprogram包中按需導出action方法。
import { observable, action } from'mobx-miniprogram';
  1. 定義 Actions 函數:與數據字段同級聲明 Actions 方法,并使用action方法包裹具體的修改函數。在函數內部,根據傳入的參數來修改 store 中的數據。
const store = observable({numberA: 1,numberB: 2,get sum() {return this.numberA + this.numberB;},updateNumber1: action((step) => {this.numberA += step;}),updateNumber2: action((step) => {this.numberB += step;})
});

在上述代碼中,updateNumber1和updateNumber2就是我們定義的 Actions 方法。當外界調用store.updateNumber1(step)時,numberA的值就會根據傳入的step值進行自增;同理,調用store.updateNumber2(step)時,numberB的值也會相應地進行修改。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/913065.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/913065.shtml
英文地址,請注明出處:http://en.pswp.cn/news/913065.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

觀測云 × AWS SSO:權限治理可觀測實踐

AWS IAM Identity Center 介紹 AWS IAM Identity Center(原 AWS Single Sign-On)是 AWS 提供的一項云原生身份與訪問管理(IAM)服務,旨在集中簡化多 AWS 賬戶、多業務應用的安全訪問控制。 觀測云 觀測云是一款專為 …

springboot整合配置swagger3

一. swagger3介紹 Swagger 3 是基于 OpenAPI 規范 3.0 的 API 文檔工具,用于設計、構建和消費 RESTful API。它通過標準化描述 API 的接口、參數、響應等元數據,實現以下核心功能: 自動生成交互式文檔API 測試與調試代碼生成(客…

RabbitMQ 4.1.1初體驗

為什么選擇 RabbitMQ?* RabbitMQ 是一款可靠且成熟的消息代理和流處理中間件,可輕松部署在云端、本地數據中心或您的開發機上,目前已被全球數百萬用戶使用。 優勢在哪里 互操作性 RabbitMQ 支持多種開放標準協議,包括 AMQP 1.0 和…

【精華】QPS限流等場景,Redis其他數據結構優劣勢對比

下面是一個詳細的 Redis 數據結構對比表,比較它們在實現 QPS 限流 / 滑動窗口統計 / 查定比監控等場景中的適用性: ? Redis 數據結構對比表(用于接口限流 / QPS 監控) 維度String INCR 固定窗口List 滑動窗口Hash 計數器ZSet 滑…

頂層設計:支持單元化、灰度化的應用架構

一、頂層目標 業務連續性:任何單元故障不影響整體彈性伸縮:根據業務流量橫向擴展靈活灰度:任何發布都可逐步平滑上線成本可控:單元化帶來的資源冗余最小 二、核心理念 設計目標核心理念單元化垂直拆分,分而治之&…

MacOS Safari 如何打開F12 開發者工具 Developer Tools

背景 If you’re a web develper, the Safari Develop menu provides tools you can use to make sure your website works well with all standards-based web browsers. 解決 If you don’t see the Develop menu in menu bar, Choose Safari > settingsClick Advanced…

2025—暑期訓練一

A 本題描述了一個最優路徑規劃問題的解法&#xff0c;核心思路是利用數軸上區間覆蓋的特性&#xff0c;將問題簡化為兩個端點的訪問問題。以下是關鍵點的詳細解析&#xff1a; 核心觀察 區間覆蓋特性 給定的位置數組 x1, x2, ..., xn 是嚴格遞增的&#xff08;即 x1 < x2 …

ubuntu 18.04配置鏡像源

配置鏡像源的主要作用是優化軟件下載速度、提升系統更新穩定性&#xff0c;并確保軟件包獲取的可靠性 我這里配置阿里云鏡像源 鏡像的具體內容參考此文: 文章鏈接 以防萬一,先備份一下 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak然后開始修改 sudo nano /etc…

RecyclerView中跳轉到最后一條item并確保它在可視區域內顯示

在RecyclerView中跳轉并顯示最后一條Item 要在RecyclerView中跳轉到最后一條item并確保它在可視區域內顯示&#xff0c;可以使用以下幾種方法&#xff1a; 1. 使用scrollToPosition()方法&#xff08;基本方法&#xff09; recyclerView.scrollToPosition(adapter.getItemCo…

ubuntu22 桌面版開啟root登陸

一、先創建root sudo passwd root 二、注釋代碼 vim /etc/pam.d/gdm-password vim/etc/pam.d/gdm-autologin 都注釋 auth required pam_succeed_if.so user ! root quiet_success 三、修改profile文件 vim /root/.profile 注釋掉 mesg n 2&#xff1e; /dev/null || true 插入新…

docker學習二天之鏡像操作與容器操作

鏡像的一般運用過程 一、鏡像&#xff08;Image&#xff09;操作 鏡像是容器的基礎模板&#xff0c;存儲在本地或遠程倉庫中。 1. 鏡像拉取 # 從指定鏡像源拉取 docker pull docker.m.daocloud.io/library/nginx 2. 鏡像查看 # 列出本地鏡像 docker images # 或 docker image…

多個參數用websocket 向io 服務器發送變量,一次發一個,并接收響應

問題&#xff1a;多個參數用websocket 向io 服務器發送變量&#xff0c;一次發一個&#xff0c;并接收響應&#xff0c;如果是多個變量&#xff0c;但還是需要一個個發送&#xff0c;應該怎么實現&#xff0c;思路是什么樣子的呢&#xff1f;用數組的話&#xff0c;應該怎么用&…

Flink-05學習 接上節,將FlinkJedisPoolConfig 從Kafka寫入Redis

上節成功實現了FlinkKafkaConsumer消費Kafka數據&#xff0c;并將數據寫入到控制臺&#xff0c;接下來將繼續將計算的結果輸入到redis中。 pom.xml 引入redis到pom包 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://mave…

git教程-pycharm使用tag打標簽

一.生成tag標簽 前言 當我們的代碼完成了第一階段的需求&#xff0c;版本穩定后&#xff0c;希望能出個穩定版本。于是在 commit 后需要打個 tag 標簽&#xff0c;也就是我們平常說的版本號&#xff0c;如v1.0版本 本篇講解如何使用 pycharm 打 tag 標簽&#xff0c;并推送到…

PHP Error: 深入解析與處理技巧

PHP Error: 深入解析與處理技巧 引言 PHP作為一種廣泛使用的服務器端腳本語言,在Web開發領域占據著重要地位。然而,任何編程語言都難以避免錯誤的發生。本文將深入探討PHP錯誤處理的相關知識,包括錯誤類型、錯誤顯示、錯誤日志以及錯誤處理技巧,幫助開發者更好地應對和解…

21、企業行政辦公(OA)數字化轉型:系統如何重塑企業高效運營新范式

企業行政辦公是營造高效工作環境、提升員工幸福感和歸屬感的重要基石&#xff0c;更是傳遞組織溫度與價值關懷的第一窗口。在數字化轉型浪潮席卷各行各業的今天&#xff0c;企業行政辦公領域正經歷一場靜默但深刻的變革。據統計&#xff0c;采用智能化OA系統的企業&#xff0c;…

基于開源AI智能名片鏈動2+1模式S2B2C商城小程序的抖音渠道力拓展與多渠道利潤增長研究

摘要&#xff1a;在數字化商業競爭日益激烈的背景下&#xff0c;抖音平臺憑借其龐大的流量基礎和興趣電商生態&#xff0c;成為品牌增長的關鍵陣地。渠道力作為品牌增長的核心驅動力&#xff0c;以抖音勢能為內核&#xff0c;通過流量與銷量的外溢效應&#xff0c;可顯著提升品…

基于二維碼的視頻合集高效管理與分發技術

一、 視頻資源聚合的技術挑戰與解決方案 在企業培訓、在線教育和產品展示等場景中&#xff0c;視頻資源的結構化組織與高效分發始終是技術實現的核心挑戰。傳統方案往往面臨三大痛點&#xff1a;資源碎片化導致的管理混亂、多視頻序列播放的用戶體驗不佳、以及跨平臺兼容性問題…

GPT-2論文閱讀:Language Models are Unsupervised Multitask Learners

本文解析 OpenAI 2019 年發布的里程碑式論文&#xff0c;該論文首次提出了 GPT-2 模型&#xff0c;揭示了語言模型作為無監督多任務學習器的革命性潛力。文章的核心觀點是&#xff1a;語言模型在無監督訓練過程中&#xff0c;可以隱式地學習多種任務&#xff0c;無需特定任務微…

R 語言安裝使用教程

一、R 語言簡介 R 是一種用于統計分析、數據挖掘和可視化的編程語言和環境。它在學術界和數據分析領域中廣泛使用&#xff0c;擁有豐富的統計函數庫和繪圖功能。 二、安裝 R 語言 2.1 下載 R 安裝包 前往 CRAN 官網下載適合你操作系統的安裝程序&#xff1a; 官網地址&…