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存储的变量:

【微信小程序】 全局数据共享的更多相关文章

  1. 微信小程序全局状态管理 wxscv

    微信小程序中,数据状态不同页面中不能跨页面同步更新,也就是缺失类似vuex,mobx,redux全局的数据状态管理功能. 有些人移植了这些库,但是毕竟不是微信小程序生态的东西. Tencent也发布了 ...

  2. 微信小程序全局属性

    通用全局属性:(前端也有) Infinity 代表正的无穷大的数值. NaN 指示某个值是不是数字值. undefined 指示未定义的值. 通用全局函数:(前端也有) decodeURI() 解码某 ...

  3. 微信小程序-全局配置、组件、页面跳转、用户信息等

    全局配置 三个页面 app.json pages字段 "pages":[ "pages/index/index", # 首页 "pages/home/ ...

  4. uni-app 微信小程序全局分享

    实际使用中,经常需要小程序分享到好友或者朋友圈,一般而言是一个个页面去设置. 官网分享介绍:https://uniapp.dcloud.io/api/plugins/share?id=onsharea ...

  5. 微信小程序全局/页面配置

    flex布局 父元素 display:flex; flex-direction: row; justify-content:space-between 补充 flex-direction属性决定主轴的 ...

  6. 微信小程序全局数据globalData的使用问题

    如果在A页面设置全局属性,但在B页面无法使用的话,可能是这个问题: app.js globalData: { helpPage:0, }, A页面 A(e) { getApp().globalData ...

  7. 微信小程序开发优化

    一.开发优化一 1.使用Vant Weapp 1.1 什么是Vant Weapp Vant Weapp官网链接 Vant Weapp是有赞前端团队开源的一套小程序UI组件库,助力开发者快速搭建小程序应 ...

  8. 微信小程序资源整理

    微信小程序相关的文档.教程.开源项目等资源的整理,以便于开发学习使用. —— —— 收录仅作个人学习使用,涉及侵权行为及时联系: maple_6392@163.com 项目地址:GitHub | 码云 ...

  9. 如何在微信小程序定义全局变量、全局函数、如何实现 函数复用 模块化开发等问题详解

    1.如何定义全局数据 在app.js的App({})中定义的数据或函数都是全局的,在页面中可以通过var app = getApp();  app.function/key的方式调用,不过我们没有必要 ...

  10. 【微信小程序开发】全局配置

    今天看看小程序全局配置. 上一篇[微信小程序开发]秒懂,架构及框架 配置,无非就是为了增加框架的灵活性,而定下的规则. 微信小程序的配置文件是一个树状结构,各个节点代表不同的配置项,小程序框架会解析这 ...

随机推荐

  1. TypeScript keyof

    keyof 是 TypeScript 中的一个关键字,用于获取一个类型的所有键(属性名)构成的联合类型.它主要用于在类型系统中引用对象类型的键. 以下是一些 keyof 的用法和示例: 1. 获取对象 ...

  2. C#.NET 逐行读取TXT文本

    C#.NET 逐行读取TXT文本 using System; using System.IO; class Program { static void Main() { string filePath ...

  3. 玩爆你的手机联系人--T9搜索

        自己研究了好几天联系人的T9搜索算法, 先分享出来给大家看看. 欢迎指教.如果有大神有更好的T9搜索算法, 那更好啊,大家一起研究研究,谢谢. 第一部分是比较简单的获取手机联系人. 获取联系人 ...

  4. The bean ‘xxx‘ could not be injected as a ‘xxx‘because it is a JDK dynamic proxy that implements错误解决

    1.解决方法:使用@Autowired 2.@autowired和@resource注解的区别区别:1.@Autowired注解由Spring提供,只按照byType注入:@resource注解由J2 ...

  5. fs.1.10 ON rockeylinux8 dockerfile模式

    概述 freeswitch是一款简单好用的VOIP开源软交换平台. rockeylinux8 docker上编译安装fs.1.10的流程记录,本文使用dockerfile模式. 环境 docker e ...

  6. 如果redis没有设置expire,他是否默认永不过期

    如果redis没有设置expire,他是否默认永不过期?默认是的 通过EXPIRE key seconds 命令来设置数据的过期时间.返回1表明设置成功,返回0表明key不存在或者不能成功设置过期时间 ...

  7. redis zset 延迟合并任务处理

    redis zset 延迟合并任务处理 @Autowired public RedisTemplate redisTemplate; ##1.发送端:在接口中收集任务ID,累计时间段之后,合并处理. ...

  8. Kubernetes(K8s)之Pod

    Pod介绍 Pod是K8s的最小调度单位 内部是一组Container容器,根容器Pause和其他业务容器 拥有唯一Pod IP 小贴士: 在生产环境中,极少单独Pod的情况 一般都是使用Deploy ...

  9. CLR via C# 笔记 -- 特性(18)

    1. 特性继承自System.Attribute,能作用于TypeDef(类.结构.枚举.接口和委托),MethodDef(含构造器),ParamDef,FieldDef,PropertyDef,Ev ...

  10. Mysql 使用(二)

    1 启动: 2 net start mysql 3 4 进入: 5 mysql -uroot -pmysql 6 7 显示数据库: 8 show databases; 9 10 使用数据库: 11 u ...