【微信小程序】 全局数据共享
1.什么是全局数据共享
全局数据共享(又叫做:状态管理)是为了解决组件之间数据共享的问题。
开发中常用的全局数据共享方案有: Vuex、Redux、 MobX等。
2.小程序中的全局数据共享方案
在小程序中,可使用mobx-miniprogram
配合mobx-miniprogram-bindings实现全局数据共享。
其中:
● mobx- miniprogram
用来创建Store实例对象
● mobx-miniprogram-bindings
用来把Store中的共享数据或方法,绑定到组件或页面中使用
3、MOBX安装
需要先有NPM支持
https://www.cnblogs.com/mindzone/p/16223460.html
安装MOBX依赖
npm install --save mobx-miniprogram@4.13.2 mobx-miniprogram-bindings@1.2.1
安装完成后,每次都要删除之前构建Miniprogram_npm包
然后重新构建生成
4、编写Store文件
/**
* /store/index.js
* 导入Mobx包资源
*/
import { action, observable } from 'mobx-miniprogram'
const config = {
// 配置对象中,存放需要共享的数据字段
numA:1,
numB:2,
// 设置只读的计算属性 get 标记该数据只能只读
get sum() { return this.numA + this.numB },
// actions方法, 用来修改store中的数据
updateNum1: action(function (step) {
this.numA += step
}),
updateNum2: action(function (step) {
this.numB += step
}),
}
// 导出资源
export const store = observable(config)
5、绑定页面
在页面的JS文件中导入资源:
import { createStoreBindings } from 'mobx-miniprogram-bindings'
import { store } from '../../store/index'
加载时绑定Store资源
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
// 页面加载时设置绑定
this.storeBindings = createStoreBindings(
this, {
store,
fields: ['numA', 'numB', 'sum'],
actions: ['updateNum1', 'updateNum2']
}
)
},
结束时解除Store资源
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
// 解除绑定
this.storeBindings.destoryStoreBindings()
},
6、使用Store配置:
store变量页面展示
<view>
{{numA}} + {{numB}} = {{sum}}
</view>
<van-button
data-step="{{1}}"
type="primary"
bindtap="btnHandler1">
numA + 1
</van-button>
<van-button
data-step="{{-1}}"
type="danger"
bindtap="btnHandler2">
numA - 1
</van-button>
绑定的方法,这里演示了如何获取dataset变量
btnHandler1(e) {
this.updateNum1( e.target.dataset.step)
},
btnHandler2(e) {
this.updateNum1( e.target.dataset.step)
}
7、配置Store到组件中使用
组件引入Mobx资源:
import { storeBindingsBehavior } from 'mobx-miniprogram-bindings'
import { store } from '../../store/index'
绑定Store和对应的属性:
// components/test6/test6.js
Component({
behaviors: [storeBindingsBehavior],
storeBindings: {
store,
// 声明绑定的字段
fields: {
// 写法一
numA: () => store.numA,
// 写法二
numB: (store) => store.numB,
// 写法三
sum: 'sum'
},
// 绑定的方法
actions: {
updateNum2: 'updateNum2'
}
}
})
方法编写:
/**
* 组件的方法列表
*/
methods: {
btnHandler1(e) {
this.updateNum2( e.target.dataset.step)
},
btnHandler2(e) {
this.updateNum2( e.target.dataset.step)
}
}
组件HTML代码
<!--components/test6/test6.wxml-->
<text>components/test6/test6.wxml</text>
<view>
{{numA}} + {{numB}} = {{sum}}
</view>
<van-button
data-step="{{1}}"
type="primary"
bindtap="btnHandler1">
numB + 1
</van-button>
<van-button
data-step="{{-1}}"
type="danger"
bindtap="btnHandler2">
numB - 1
</van-button>
在页面和组件能够共同操作Store存储的变量:


浙公网安备 33010602011771号