当前位置: 首页 > backend >正文

小程序全局状态管理:使用MobX进行跨组件数据共享详解(九)

一、定义

全局数据共享(又叫:状态管理)是为了解决组件之间数据共享的问题;

全局数据共享方案:VueX、Redux、MobX等;

二、小程序全局数据共享方案

使用mobx-miniprogram配合mobx-miniprogram-bindings实现全局数据共享;

mobx-miniprogram用来创建Store实例对象

mobx-miniprogram-bindings用来把Store中的共享数据或方法,绑定到组件或页面中

三、安装mobx

# 安装最新包
npm install --save mobx-miniprogram mobx-miniprogram-bindings
# 指定版本
npm install --save mobx-miniprogram@4.13.2 mobx-miniprogram-bindings@1.2.1

四、创建Store实例

注意:只能通过函数修改store中值,不能直接修改

// 在这个 JS文件中,专门创建Store实例对象// 导入mobx-miniprogram中observable,action这两个方法
import {observable,action} from 'mobx-miniprogram'// 导出
export const store = observable ({// 挂载共享数据numA:1,numB:2,// 计算属性 get代表只读get sum() {return this.numA + this.numB},// 定义action函数,特意修改store中数据的值updateNum1: action(function(step) {this.numA += step}),// 定义action函数,特意修改store中数据的值updateNum2: action(function(step) {this.numB += step})
})

五、将Store中的成员绑定到页面中

实现思路:

1、在页面js中引入mobx-miniprogram-bindings和store

2、在页面加载中通过bindings加载函数

3、在onUnload中清楚数据

操作:

/*** 生命周期函数--监听页面加载*/onLoad(options) {//  createStoreBindings(当前页面实例,page对象)// page对象:{数据源,需要绑定的属性,需要绑定的方法}this.storeBindings = createStoreBindings(this,{store,fields:['numA','numB','sum'],actions:['updateNum1']})},/*** 生命周期函数--监听页面卸载*/onUnload() {this.storeBindings.destroyStoreBindings}

六、在页面中使用Store中的成员

<view> {{numA}} + {{numB}} = {{sum}}</view>
<van-button type='primary' bindtap="updateNumA" data-step="{{1}}">+1</van-button>
<van-button type='danger' bindtap="updateNumA" data-step="{{-1}}">-1</van-button>
import {createStoreBindings} from 'mobx-miniprogram-bindings'
import {store} from '../../store/store'Page({/*** 页面的初始数据*/data: {username:'ZhangSan',country:'CHINA'},updateNumA(e) {this.updateNum1(e.target.dataset.step)},/*** 生命周期函数--监听页面加载*/onLoad(options) {//  createStoreBindings(当前页面实例,page对象)// page对象:{数据源,需要绑定的属性,需要绑定的方法}this.storeBindings = createStoreBindings(this,{store,fields:['numA','numB','sum'],actions:['updateNum1']})},/*** 生命周期函数--监听页面卸载*/onUnload() {this.storeBindings.destroyStoreBindings}
})

七、在组件中使用Store中的成员

// components/numbers/numbers.js
// 第一步 导入包
import {storeBindingsBehavior} from 'mobx-miniprogram-bindings'
import {store} from '../../store/store'Component({// 第二步 绑定属性behaviors: [storeBindingsBehavior],storeBindings: {// 数据源store,// 属性fields:{numA:'numA',numB:'numB',sum:'sum'},actions: {updateNum2: 'updateNum2'}},/*** 组件的属性列表*/properties: {},/*** 组件的初始数据*/data: {},/*** 组件的方法列表*/methods: {// 第四步 调用方法updateNumB (e) {this.updateNum2(e.target.dataset.step)}}
})
<!-- 第三步 绑定数据 -->
<van-button type="primary" bindtap="updateNumB" data-step="{{1}}">+1</van-button>
<van-button type="danger" bindtap="updateNumB" data-step="{{-1}}">-1</van-button>
<view>························</view>
<my-numbers></my-numbers>

http://www.xdnf.cn/news/18591.html

相关文章:

  • 国内使用SSH稳定使用github
  • 分布式账本:当不可篡改性遭遇法律拷问
  • ​Mac用户安装JDK 22完整流程(Intel版dmg文件安装指南附安装包下载)​
  • 【链表 - LeetCode】206. 反转链表【带ACM调试】
  • [身份验证脚手架] 前端认证与个人资料界面
  • 商密保护迷思:经营秘密到底需不需要鉴定?
  • 高并发内存池(1)-定长内存池
  • 通过python程序将实时监测数据写入excel软件进行保存是常用和非常实用的功能,本文教会大家怎么去搞定此功能
  • 塔能科技物联精准节能如何构建智慧路灯免疫系统
  • pycharm的matplotlib不显示动图问题的解决
  • `free` 内存释放函数
  • Linux --网络基础概念
  • 分布式事务的两种解决方案
  • K8s部署MySQL8.0数据库
  • 【大语言模型 17】高效Transformer架构革命:Reformer、Linformer、Performer性能突破解析
  • Baumer高防护相机如何通过Tiny-YOLO单类模型实现人体跌倒检测与跟踪(C#代码UI界面版)
  • 从 UMG 到 Unreal 引擎深层的 UI 定制艺术:Slate 底层 UI 框架简介
  • Python爬虫-解决在抓包的过程中,找不到接口地址的问题
  • 『深度编码』操作系统-进程之间的通信方法
  • 使用dumpbin指令分析Windows下的PE文件(伍)
  • 跨语言文化的统一语义真理:存在性、形式化及其对自然语言处理(NLP)深层语义分析的影响
  • Transformer实战(13)——从零开始训练GPT-2语言模型
  • Redis--day12--黑马点评--附近商铺用户签到UV统计
  • Trip Footprint_Trae Solo模式生成一个旅行足迹App
  • 【卷积神经网络详解与实例】2——卷积计算详解
  • 大模型训练方法全面解析:SFT、RFT、TRPO、DPO、PPO、GRPO、RLH、RLHF技术深度剖析
  • 14.Shell脚本修炼手册--玩转循环结构(While 与 Until 的应用技巧与案例)
  • 题解:P13754 【MX-X17-T3】Distraction_逆序对_前缀和_Ad-hoc_算法竞赛C++
  • java猜数字游戏(赌城主题版)
  • priority_queue和仿函数