小程序学习笔记:使用 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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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; 官网地址&…