【微信小程序】全局数据共享 - MobX

news2024/12/26 21:57:17

1. 什么是全局数据共享

在这里插入图片描述

在这里插入图片描述

2. 小程序中的全局数据共享方案

在这里插入图片描述

3.Mobx的使用

1.npm init -y(根据实际情况选择)

在小程序项目中,可以通过 npm 的方式引入 MobX 。
如果你还没有在小程序中使用过 npm ,那先在小程序目录中执行命令:

npm init -y

2. 安装 MobX 相关的包

在项目中运行如下的命令,安装 MobX 相关的包:

npm install --save mobx-miniprogram mobx-miniprogram-bindings

安装指定版本:
在这里插入图片描述

3.构建npm(一定要记得)

MobX 相关的包安装完毕之后,记得删除 miniprogram_npm 目录后重新构建 npm

4.创建 MobX 的 Store 实例

  1. 根目录下创建 Store/store.js 文件。
  2. mobx-miniprogram 包中导入 observableaction两个方法。
  • observable: 用于创建 store 的实例对象
  • action: 用于包裹修改 store 数据的函数

在这里插入图片描述

import { observable,action} from 'mobx-miniprogram'
// observable 的返回值就是 store 对象
export const store = observable({
  // 数据字段
  numA: 1,
  numB: 2,
  // 计算属性 get为修饰符
  get sum(){
    return this.numA + this.numB
  },
  //action方法,用来修改 store 中的数据
  updateNumA: action(function (step){
    this.numA += step
  }),
  updateNumB: action(function (step){
    this.numB += step
  })
})

5.将 Store 中的成员绑定到页面

在小程序中,将 store 成员绑定到页面中使用,可分三个步骤:

    1. 在页面 js 文件导入需要的成员。–createStoreBindings
    1. 在 onLoad 开始生命周期进行绑定。
    1. 在 onUnload 生命周期取消监听。

在这里插入图片描述

// pages/message/message.js
import { createStoreBindings } from 'mobx-miniprogram-bindings'
import { store } from '../../store/store'
Page({
  addSumA(e){
    this.updateNumA(e.target.dataset.step)
  },

  /**
   * 页面的初始数据
   */
  data: {

  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.storeBindings = createStoreBindings(this,{
      store,
      fields: ['numA','numB','sum'],
      actions: ['updateNumA']  // 注意是actions  不是action
    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
    this.storeBindings.destroyStoreBindings()
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})

其中 createStoreBindings 中的this指向当前调用该函数的实例,也就是 message 页面实例
第二个参数是一个对象,
store 代表着数据源,将 store 的属性或者方法绑定到页面实例中。
fields 是绑定到页面实例中的数据字段。
actions 是绑定到页面实例中的方法。
this.storeBindings 是接收 createStoreBindings 的返回值,并挂载在页面上,当页面卸载时需要进行清空操作。

6.在页面上使用 Store 中的成员

在这里插入图片描述

<!--pages/message/message.wxml-->
<text>pages/message/message.wxml</text>
<view>{{numA}} + {{numB}} = {{sum}}</view>
<van-button bindtap="addSumA" data-step="{{1}}" type="primary">numA + 1</van-button>

7.将 Store 中的成员绑定到组件

Store 中的属性方法绑定到组件中,实现步骤可分为三个步骤:

  • 在组件 js 文件导入需要的成员。–storeBindingsBehavior
  • 在 Component 提供behaviors节点来存储前面导入的 Behaviors 数组。
  • 在 behaviors 节点平级的位置声明 storeBindings 对象接收 store、fields 和 actions 这三个属性。
  • 在这里插入图片描述
// components/my-number/my-number.js
import { storeBindingsBehavior } from 'mobx-miniprogram-bindings'
import { store } from '../../store/store'
Component({
  behaviors:[storeBindingsBehavior],
  storeBindings:{
    store,
    fields:{
      numA: ()=> store.numA,
      numB: (store) => store.numB,
      sum:'sum'
    },
    actions:{
      updateNumB:'updateNumB'
    }
  },
  /**
   * 组件的属性列表
   */
  properties: {

  },

  /**
   * 组件的初始数据
   */
  data: {

  },

  /**
   * 组件的方法列表
   */
  methods: {
    addNumB(e){
      this.updateNumB(e.target.dataset.step)
    }
  }
})

8.在组件上使用 Store 中的成员

在这里插入图片描述

<!--components/my-number/my-number.wxml-->
<text>components/my-number/my-number.wxml</text>
<view>-----------------组件---------------</view>
<van-button type="primary" bindtap="addNumB" data-step="{{1}}">numB + 1</van-button>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2085528.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从“输血“到“造血“:“拨改投“政策如何推动产业升级?

在经济发展的浪潮中&#xff0c;“拨改投”政策如同一股清流&#xff0c;以创新之姿重塑了财政资金的传统使用模式。这一政策精髓在于&#xff0c;将财政资金从直接的拨款方式转变为灵活的股权投资方式&#xff0c;不仅激活了市场活力&#xff0c;更引领了产业升级的新风尚。 “…

Windows 10/11降级漏洞的工具包现已发布 仅供安全测试

早前有研究人员在分析 Windows 10/11 更新机制时发现微软虽然已经考虑到潜在的安全问题增加了各种限制&#xff0c;但还是存在失误因此存在弱点&#xff0c;研究人员则通过该弱点成功降级了系统。通过该漏洞不仅可以成功降级系统&#xff0c;同时系统还会认为自己已经完成更新并…

高级算法设计与分析 学习笔记1 递归与分治法 复杂度计算 大数乘法

本章的目录&#xff1a; 排序问题的示例与分析&#xff1a;递归与分治 插入排序&#xff1a; 类似于排序扑克牌。先把第一个元素当成已排序序列&#xff0c;然后把第二个纳入&#xff0c;用一次插入排序&#xff0c;然后将第三个纳入…… 插入排序性能分析 大O表示上界&#x…

云微客一分钟告诉你,为什么要做短视频矩阵?

都说2024年是经济下行的一年&#xff0c;但是要问2024年的营销关键词是什么的话&#xff0c;那一定是&#xff1a;短视频矩阵。短视频矩阵就是在多个短视频平台上建立多个账号&#xff0c;通过矩阵系统发布不同类型的短视频内容&#xff0c;实现品牌曝光、用户引流、粉丝积累等…

探索AI智能问答:改变未来交流的新动力

随着大数据和机器学习的发展&#xff0c;AI智能问答系统已经不仅仅是科幻小说中的幻想&#xff0c;而是正逐步融入我们的日常生活&#xff0c;从客户服务到教育&#xff0c;再到医疗诊断&#xff0c;其应用范围如此之广&#xff0c;让人叹为观止。 一、AI智能问答系统的原理与运…

关于武汉芯景科技有限公司的实时时钟芯片XJ8337开发指南(兼容DS1337)

一、芯片引脚介绍 1.芯片引脚 2.引脚描述 二、系统结构图 三、功能描述 1.时钟功能 2.闹钟功能&#xff08;两个闹钟&#xff09; 3.振荡器停止控制 4.频率输出&#xff08;1HZ、1.096KHZ、8.192KHZ、32.768KHZ&#xff09; 5.振荡器停止检测 6.闹钟中断标志 四、程序代…

AI模型应该追求全能还是专精

目录 1.概述 2.AI模型的全面评估和比较 2.1. 精度 (Accuracy) 2.2. 速度 (Speed) 2.3. 鲁棒性 (Robustness) 2.4. 可扩展性 (Scalability) 2.5. 解释性/可解释性 (Interpretability) 2.6.应用场景分析 3.AI模型的专精化和可扩展性 3.1. 模型构架选择 3.2. 训练策略 …

sheng的学习笔记-AI-图半监督学习

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 半监督学习&#xff1a;sheng的学习笔记-AI-半监督学习-CSDN博客 什么是图半监督学习 给定一个数据集&#xff0c;我们可将其映射为一个图&#xff0c;数据集中每个样本对应于图中一个结点&#xff0c;若两个样本之间的相…

mysql的组从复制

1.原理分析 三个线程 1.实际上主从同步的原理就是基于 binlog 进行数据同步的。在主从复制过程中&#xff0c;会基于 3 个线程来操作&#xff0c; 一个主库线程&#xff0c;两个从库线程。 2.二进制日志转储线程&#xff08; Binlog dump thread &#xff09;是一个主库线程…

神仙级的免费开源电子书阅读器,还支持听书功能,极空间部署『Koodo Reader』

神仙级的免费开源电子书阅读器&#xff0c;还支持听书功能&#xff0c;极空间部署『Koodo Reader』 哈喽小伙伴们好&#xff0c;我是Stark-C~ 前段时间不是给大家分享的电子书管理工具『TaleBook』嘛~&#xff0c;然后就有粉丝私信我有没有那种专门看电子书的阅读器&#xff…

Qt上传文件小记

最近由于公司上线了云平台&#xff0c;需要用Qt与云平台进行对接&#xff0c;故拾起了network模块。 众所周知Qt网络http相关的类QNetworkAccessManager发挥着举足轻重的作用。 普通的http&#xff1a;GET POST PUT DELETE已经耳熟能详&#xff0c;网上也有很多的文章有介绍到…

如何限制企业内部文件外发?告别文件泄露,七大招数限制企业内部文件外发!

如何限制企业内部文件外发&#xff0c;告别文件泄露&#xff01;文件一旦外泄&#xff0c;不仅可能泄露商业机密&#xff0c;还可能对企业的声誉和利益造成重大损害。 因此&#xff0c;如何有效限制企业内部文件外发&#xff0c;成为了每个企业必须面对和解决的问题。以下七大…

Vue 3 CLI TypeScript 项目搭建全攻略

一、前期准备 在搭建 Vue 3 CLI TypeScript 项目之前&#xff0c;我们需要做好一系列的准备工作。 首先&#xff0c;Node.js 是必不可少的运行环境。Vue 3 CLI 要求 Node.js 的版本至少为 8.9 以上。您可以从Node.js 官方网站下载最新的长期支持&#xff08;LTS&#xff09;版…

数字芯片设计验证经验分享系列文章(第四部分):将ASIC IP核移植到FPGA上——如何测试IP核的功能和考虑纯电路以外的其他因素

作者&#xff1a;Philipp Jacobsohn&#xff0c;SmartDV首席应用工程师 Sunil Kumar&#xff0c;SmartDV FPGA设计总监 本系列文章从数字芯片设计项目技术总监的角度出发&#xff0c;介绍了如何将芯片的产品定义与设计和验证规划进行结合&#xff0c;详细讲述了在FPGA上使用I…

Python中类型转换函数1

1 bool()函数 bool()函数的作用是将给定参数转换为布尔类型&#xff0c;指定参数是非零值&#xff0c;则转换为True&#xff0c;否则转换为False&#xff0c;如图1所示。 图1 bool()函数的使用方法1 如果bool()函数没有参数&#xff0c;则返回值是False&#xff0c;如图2所示…

如何查看 Kubernetes 的操作审计日志?

极狐GitLab 通过 Kubernetes Agent 对 Kubernetes 集群进行管理。整体的步骤为 Kubernetes Agent 的注册、安装。当然&#xff0c;也可以直接对 Agent 进行删除。不管是添加还是删除&#xff0c;后台都会有对应的审计日志&#xff0c;方便对 Kubernetes 集群的操作进行安全审计…

金九银十面试丨Python自动化测试的面试真题:

1.请解释一下Python自动化测试是什么以及为什么它重要&#xff1f; Python自动化测试是指使用Python编程语言进行测试过程中的自动化的过程。它通过编写测试脚本和自动化工具来模拟用户的行为&#xff0c;执行测试用例&#xff0c;并能够自动捕获测试结果和生成测试报告。Pyth…

Qt QLineEdit输入内容的格式限制(2)

设置QlineEdit控件不可编辑、密文输入、输入格式等小技巧 1. 设置不可编辑 setReadOnly(false);//文本不可编辑&#xff0c;但可以复制到剪切板 setEnabled(false);//整个控件被禁用&#xff0c;且会调用控件的禁用状态 setFocusPolicy(Qt::NoFocus);//无法获得焦点&#xff…

什么是密码学?

什么是密码学&#xff1f; 密码学是一种通过使用编码算法、哈希和签名来保护信息的实践。此信息可以处于静态&#xff08;例如硬盘驱动器上的文件&#xff09;、传输中&#xff08;例如两方或多方之间交换的电子通信&#xff09;或使用中&#xff08;在对数据进行计算时&#…

第二十五课,字符串操作函数(二)

一&#xff0c;字符串.replace(子串1, 子串2)&#xff1a;将字符串内的全部子串1&#xff0c;替换为子串2 在用电脑办公时&#xff0c;会出现这样的情景&#xff1a;一篇很长的文章中有一个人的名字全部被错写了&#xff0c;我们需要修改&#xff0c;但一个一个找错掉的名字修…