微信小程序_22,全局数据共享

什么是全局数据共享:

全局数据共享(又叫做:状态管理),是为了解决组件之间数据共享的问题
开发中常用的全局数据共享方案有:Vuex,Redux,Mobx等

在这里插入图片描述

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

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

  • mobx-miniprogram用来创建Store示例对象
  • mobx-miniprogram-bindings用来把Store中的共享数据或方法,绑定到组件或页面中使用

在这里插入图片描述

安装Mobx相关的包:

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

注意:安装完相关的包之后,记得删除miniprogram_npm目录后.重新构建npm

使用:

在项目目录下创建stroe文件夹,并创建对应的js文件:
在这里插入图片描述
在js文件中导出store:

// 在这个js文件中专门用来创建store实例对象
import {observable} from 'mobx-miniprogram'

export const store=observable({})

创建Mobx的stroe实例:

// 在这个js文件中专门用来创建store实例对象
import {
  action,
  observable
} from 'mobx-miniprogram'

export const store = observable({
  // 数据字段:
  num1: 123,
  num2: 321,
  step: 2,
  // 计算属性:
  get sum() {
    return this.num1 + this.num2
  },
  // actions
  updateNum1: action(function () {
    this.num1 += step
  }),
  updateNum2: action(function () {
    this.num2 += step
  }),
})

将store中的成员绑定到页面中:

在页面的js中:

//页面的监听js文件
import {
  createStoreBindings
} from 'mobx-miniprogram-bindings'
import {
  store
} from '../../store/store'


Page({
  onLoad: function () {
    // 监听页面加载
    this.storeBindings = createStoreBindings(this, {
      store,
      fields: ['num1', 'num2', 'sum'],
      actions: ['updateNum1', 'updateNum2']
    })
  },
  onUnload: function () {
    // 生命周期函数,监听页面卸载
    this.storeBindings.destroyStoreBindings()
  },
})

此时可以看下数据是否已经计算:
在这里插入图片描述
将store中的fun绑定到页面中:

<view>{{num1}}+{{num2}}={{sum}}</view>
<vantButton type="primary" bindtap="btnHandler1" data-step="{{1}}">num1+1</vantButton>
<vantButton type="primary" bindtap="btnHandler1" data-step="{{-1}}">num1-1</vantButton>
// index.js
// 获取应用实例
const app = getApp()
//页面的监听js文件
import {
  createStoreBindings
} from 'mobx-miniprogram-bindings'
import {
  store
} from '../../store/store'

Page({
  onLoad: function () {
    // 监听页面加载
    this.storeBindings = createStoreBindings(this, {
      store,
      fields: ['num1', 'num2', 'sum'],
      actions: ['updateNum1', 'updateNum2']
    })
  },
  btnHandler1(e) {
    this.updateNum1(e.target.dataset.step)
  },
  onUnload: function () {
    // 生命周期函数,监听页面卸载
    this.storeBindings.destroyStoreBindings()
  },
})

store.js中有不同的写法,示例可以查看下面:
在这里插入图片描述
在组件中引入store时,可以映射store中对应的对象或者变量名,如下面的behaviors,storeBindingsactions:

// pages/mynumber/mynumber.js
import {
  storeBindingsBehavior
} from "mobx-miniprogram-bindings"
import {
  store
} from "../../store/store"
Component({
  behaviors: [storeBindingsBehavior],
  storeBindings:{
    // 数据源
    store,
    fields:{
      // 映射名:'组件中的变量名',可以简写
      num1:'num1',
      num2:'num2',
      sum:'sum'
    },
    //store中的function需要在actions下映射,这里也可以简写的
    actions:{
        updateNum1:'updateNum1'
    }
  },
})
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

无名之辈无名之辈

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

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

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

打赏作者

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

抵扣说明:

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

余额充值