1. 定义:全局数据共享(又叫做:状态管理)是为了解决组件之间数据共享的问题。开发中常用的全局数据共享方案有:Vuex、Redux、MobX 等。而我们微信小程序常用的全局共享方案是:MobX
我们可以通过上面这张图清除的看到,如果不使用MobX全局数据共享的话,如果需要调用某个组件,则需要一层一层调用,如果定义了全局数据共享,那么可以直接拿到数据,不需要一层一层调用
2.全局数据共享的具体方案
在小程序中,可使用 mobx-miniprogram 配合 mobx-miniprogram-bindings 实现全局数据共享。其中:
3. 使用
①通过npm安装MobX相关的包
npm i --save [email protected] [email protected]
注意:MobX 相关的包安装完毕之后,记得删除 miniprogram_npm 目录后,重新构建 npm。
先在项目目录下删除miniprogram_npm 目录,然后通过如下图重新构建npm
②创建MobX的store实例
在根目录下新建store文件夹,然后在store文件夹下创建store.js文件
然后在store.js中编写如下代码:
//在这个JS文件中,专门用来创建 Store 的实例对象
import {action, observable} from 'mobx-miniprogram'
export const store = observable({
numA:1,
numB:2,
// 计算属性
get sum(){
return this.numA + this.numB
},
// actions 方式,用来修改store中的数据
updateNum1:action(function(step){
this.numA += step
}),
updateNum2:action(function(step){
this.numB += step
}),
})
③. 将 Store 中的成员绑定到页面中
//先引入
import {
createStoreBindings
} from 'mobx-miniprogram-bindings'
import {
store
} from '../../store/store'
Page({
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
this.storeBindings = createStoreBindings(this, {
store,
fields: ['numA', 'numB', 'sum'],
actions: ['updateNum1']
})
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
this.storeBindings.detroyStoreBindings()
},
})
④. 在页面上使用 Store 中的成员
//页面.wxml结构
{{numA}} + {{numB}} = {{sum}}
numA+1
numA-1
//按钮tap事件处理函数
btnHandler(e) {
this.updateNum1(e.target.dataset.step)
},
4.在组件中使用
在组件.js文件中引入,将Store绑定到组件中:
import {storeBindingsBehavior} from 'mobx-miniprogram-bindings'
import {store} from "../../store/store"
Component({
behaviors:[storeBindingsBehavior],
storeBindings:{
//数据源
store,
fields:{
numA:'numA',
numB:'numB',
sum:'sum'
},
actions:{
updataNum2:'updateNum2'
}
},
/**
* 组件的属性列表
*/
properties: {
},
/**
* 组件的初始数据
*/
data: {
},
/**
* 组件的方法列表
*/
methods: {
}
}
})
接下来在组件.wxml结构中使用
//组件.wxml结构
{{numA}} + {{numB}} = {{sum}}
numB+1
numB-1
/**
* 组件的方法列表
*/
methods: {
btnHandler2(e){
this.updataNum2(e.target.dataset.step)
}
}