小程序 全局数据共享

什么是全局数据共享

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

开发中常用的全局数据共享方案有:Vuex、Redux、MobX 等。

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

在小程序中,可使用 mobx-miniprogram 配合 mobx-miniprogram-bindings 实现全局数据共享。其中:

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

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

全局数据共享 - MobX

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

npm install --save mobx-miniprogram@4.13.2 mobx-miniprogram-bindings@1.2.1

注意:MobX 相关的包安装完毕之后,记得删除 miniprogram_npm 目录后,重新构建 npm。(我们真正使用的包是 miniprogram_npm 构建后的包)

2.在store.js中,创建 MobX 的 store 实例

import { observable, action} from "mobx-miniprogram"
export const store = observable({
	// 数据字段
	numA:1,
	numB:2,
	// 计算属性,使用 get 关键字修饰
	get sum(){
	  return this.numA + this.numB
	},
	// action 方法,用来修改 store 中的数据
	myUpdateNum1:action(function (step) {
	  this.numA += step
	})
})

3.将 Store 中的成员绑定到【页面中】

// 页面的 .js文件
  import { createStoreBindings } from 'mobx-miniprogram-bindings'
  import { store } from '../../store/store'
  
  Page({
  
    // 生命周期函数--监听页面加载
    onLoad: function (options) { 
        // 返回的方法绑定给 this.storeBindings
        this.storeBindings = createStoreBindings(this, {
            store,
            fields: ["numA", "numB", "sum"],
            actions: ["updateNumA", "updateNumB"]
        })
    },
    
    // 生命周期函数--监听页面卸载
    onUnload: function () {
        // 销毁
        this.storeBindings.destroyStoreBindings()
    },
    
    // 按钮 tap 事件的处理函数
    handleNum(e){
     // 调用并传参给 store 中定义的方法
     this.updateNumA(e.target.dataset.step)
  },
    
  })
  
// 页面的 .wxml 结构
  <view>
      {{numA}} + {{numB}} = {{sum}}
  </view>
  
  <van-button bindtap="handleNum" data-step="{1}}">
      numA + 1
  </van-button>
  
  <van-button bindtap="handleNum" data-step="{{-1}}">
      numA - 1
  </van-button>
  <view>

4.将 Store 中的成员绑定到【组件中】

// 组件的 .js文件
 import { storeBindingsBehavior} from 'mobx-miniprogram-bindings'
 import { store } from "../../store/store"
 
 Component({
    // 通过 storeBindingsBehavior 来实现自动绑定
    behaviors:[storeBindingsBehavior],
    
    storeBindings:{
        store,    // 指定要绑定的store
        fields:{  // 指定要绑定的字段数据
            numA:"numA",  // 绑定字段的第 1 种方式
            numB:"numB",  
            sum:"sum",    
            numC:() => store.numC,    // 绑定字段的第 2 种方式
            numD:(store)=> store.numB // 绑定字段的第 3 种方式
            
        },
        actions:{  // 指定要绑定的方法
            updateNumB:"updateNumB"
        }
    },


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

// 组件的 .wxml文件
  <view>
      {{numA}} + {{numB}} = {{sum}}
  </view>
  
  <van-button bindtap="handleNum1" data-step="{{1}}">
      numA + 1
  </van-button>
  
  <van-button bindtap="handleNum1" data-step="{{-1}}">
      numA - 1
  </van-button>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不叫虎子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值