【微信小程序】 全局数据共享
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存储的变量:

【微信小程序】 全局数据共享的更多相关文章
- 微信小程序全局状态管理 wxscv
微信小程序中,数据状态不同页面中不能跨页面同步更新,也就是缺失类似vuex,mobx,redux全局的数据状态管理功能. 有些人移植了这些库,但是毕竟不是微信小程序生态的东西. Tencent也发布了 ...
- 微信小程序全局属性
通用全局属性:(前端也有) Infinity 代表正的无穷大的数值. NaN 指示某个值是不是数字值. undefined 指示未定义的值. 通用全局函数:(前端也有) decodeURI() 解码某 ...
- 微信小程序-全局配置、组件、页面跳转、用户信息等
全局配置 三个页面 app.json pages字段 "pages":[ "pages/index/index", # 首页 "pages/home/ ...
- uni-app 微信小程序全局分享
实际使用中,经常需要小程序分享到好友或者朋友圈,一般而言是一个个页面去设置. 官网分享介绍:https://uniapp.dcloud.io/api/plugins/share?id=onsharea ...
- 微信小程序全局/页面配置
flex布局 父元素 display:flex; flex-direction: row; justify-content:space-between 补充 flex-direction属性决定主轴的 ...
- 微信小程序全局数据globalData的使用问题
如果在A页面设置全局属性,但在B页面无法使用的话,可能是这个问题: app.js globalData: { helpPage:0, }, A页面 A(e) { getApp().globalData ...
- 微信小程序开发优化
一.开发优化一 1.使用Vant Weapp 1.1 什么是Vant Weapp Vant Weapp官网链接 Vant Weapp是有赞前端团队开源的一套小程序UI组件库,助力开发者快速搭建小程序应 ...
- 微信小程序资源整理
微信小程序相关的文档.教程.开源项目等资源的整理,以便于开发学习使用. —— —— 收录仅作个人学习使用,涉及侵权行为及时联系: maple_6392@163.com 项目地址:GitHub | 码云 ...
- 如何在微信小程序定义全局变量、全局函数、如何实现 函数复用 模块化开发等问题详解
1.如何定义全局数据 在app.js的App({})中定义的数据或函数都是全局的,在页面中可以通过var app = getApp(); app.function/key的方式调用,不过我们没有必要 ...
- 【微信小程序开发】全局配置
今天看看小程序全局配置. 上一篇[微信小程序开发]秒懂,架构及框架 配置,无非就是为了增加框架的灵活性,而定下的规则. 微信小程序的配置文件是一个树状结构,各个节点代表不同的配置项,小程序框架会解析这 ...
随机推荐
- TypeScript keyof
keyof 是 TypeScript 中的一个关键字,用于获取一个类型的所有键(属性名)构成的联合类型.它主要用于在类型系统中引用对象类型的键. 以下是一些 keyof 的用法和示例: 1. 获取对象 ...
- C#.NET 逐行读取TXT文本
C#.NET 逐行读取TXT文本 using System; using System.IO; class Program { static void Main() { string filePath ...
- 玩爆你的手机联系人--T9搜索
自己研究了好几天联系人的T9搜索算法, 先分享出来给大家看看. 欢迎指教.如果有大神有更好的T9搜索算法, 那更好啊,大家一起研究研究,谢谢. 第一部分是比较简单的获取手机联系人. 获取联系人 ...
- 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 ...
- fs.1.10 ON rockeylinux8 dockerfile模式
概述 freeswitch是一款简单好用的VOIP开源软交换平台. rockeylinux8 docker上编译安装fs.1.10的流程记录,本文使用dockerfile模式. 环境 docker e ...
- 如果redis没有设置expire,他是否默认永不过期
如果redis没有设置expire,他是否默认永不过期?默认是的 通过EXPIRE key seconds 命令来设置数据的过期时间.返回1表明设置成功,返回0表明key不存在或者不能成功设置过期时间 ...
- redis zset 延迟合并任务处理
redis zset 延迟合并任务处理 @Autowired public RedisTemplate redisTemplate; ##1.发送端:在接口中收集任务ID,累计时间段之后,合并处理. ...
- Kubernetes(K8s)之Pod
Pod介绍 Pod是K8s的最小调度单位 内部是一组Container容器,根容器Pause和其他业务容器 拥有唯一Pod IP 小贴士: 在生产环境中,极少单独Pod的情况 一般都是使用Deploy ...
- CLR via C# 笔记 -- 特性(18)
1. 特性继承自System.Attribute,能作用于TypeDef(类.结构.枚举.接口和委托),MethodDef(含构造器),ParamDef,FieldDef,PropertyDef,Ev ...
- Mysql 使用(二)
1 启动: 2 net start mysql 3 4 进入: 5 mysql -uroot -pmysql 6 7 显示数据库: 8 show databases; 9 10 使用数据库: 11 u ...