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

小程序全局状态管理:使用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.dtcms.com/a/348621.html

相关文章:

  • c++基础知识入门
  • 【AI智能体】Dify 搭建业务单据差异核对助手实战详解
  • kubernetes中的认证和授权
  • Python 变量 (variables)、对象 (objects) 和引用 (references)
  • 第1章:量子涟漪
  • 双网卡并行访问:解决有线局域网与无线互联网共存时的路由冲突问题
  • 淘宝pc端首页做了哪些性能优化?
  • 大型 C/C++ 项目中 AI 助手(Cursor / Claude Code)日常操作清单与发散思路
  • MYSQL-表的约束(下)
  • 数据建模怎么做?一文讲清数据建模全流程
  • 设备管理与策略
  • UE5.5 C++ 增强输入 快速上手
  • nginx部署goaccess监控
  • JdbcTemplate和MyBatis的区别
  • 《支付回调状态异常的溯源与架构级修复》
  • 学习制作记录(选项UI以及存档系统)8.24
  • KVM虚拟化
  • Vue3 setup代替了vue2的哪些功能
  • 分布式事务的两种解决方案
  • MYSQL(DDL)
  • 前端 vs 后端请求:核心差异与实战对比
  • Qt——网络通信(UDP/TCP/HTTP)
  • 【Unity开发】Unity核心学习(二)
  • PAT 1081 Rational Sum
  • 【机器学习】8 Logistic regression
  • Power BI切片器自定义顺序
  • 智能油脂润滑系统:给设备一份 “私人定制” 的保养方案
  • Linux 学习笔记 - 集群管理篇
  • 【大模型LLM学习】Data Agent学习笔记
  • C++算法学习专题:二分查找