iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >微信小程序的全局状态管理 — mobx-miniprogram
  • 190
分享到

微信小程序的全局状态管理 — mobx-miniprogram

微信小程序前端小程序 2023-10-11 19:10:59 190人浏览 八月长安
摘要

一、简介 在小程序中,常常有些数据需要在几个页面或组件中共享。使用 MobX 来管理小程序的跨页面数据,  其实类似于Vuex的store。 小程序的 MobX 绑定辅助库。 此 behavior 依赖开发者工具的 npm 构建。具体

一、简介

小程序中,常常有些数据需要在几个页面或组件中共享。使用 MobX 来管理小程序的跨页面数据,  其实类似于Vuex的store。

小程序的 MobX 绑定辅助库。

此 behavior 依赖开发工具的 npm 构建。具体详情可查阅 官方 npm 文档

可配合 MobX 的小程序构建版 npm 模块 mobx-miniprogram 使用。

 更为详细的说明和指引,可点击项目地址

 

二、使用方法 

需要小程序基础库版本 >= 2.2.3 的环境。

可以直接参考这个代码片段(在微信开发者工具中打开): https://developers.weixin.qq.com/s/nGvWJ2mL7et0

1、安装 mobx-miniprogrammobx-miniprogram-bindings 

npm install --save mobx-miniprogram mobx-miniprogram-bindings

2.、创建 MobX Store

// store.jsimport { observable, action } from "mobx-miniprogram";export const store = observable({  // 数据字段  numA: 1,  numB: 2,  // 计算属性  get sum() {    return this.numA + this.numB;  },  // actions  update: action(function () {    const sum = this.sum;    this.numA = this.numB;    this.numB = sum;  }),});

3、在 Component 构造器中使用

import { storeBindingsBehavior } from "mobx-miniprogram-bindings";import { store } from "./store";Component({  behaviors: [storeBindingsBehavior],  data: {    someData: "...",  },  storeBindings: {    store,    fields: {      numA: () => store.numA,      numB: (store) => store.numB,      sum: "sum",    },    actions: {      buttonTap: "update",    },  },  methods: {    myMethod() {      this.data.sum; // 来自于 MobX store 的字段    },  },});

4、在 Page 构造器中使用

如果小程序基础库版本在 2.9.2 以上,可以直接像上面 Component 构造器那样引入 behaviors 。

如果需要比较好的兼容性,可以使用下面这种方式(或者直接改用 Component 构造器来创建页面)。

import { createStoreBindings } from "mobx-miniprogram-bindings";import { store } from "./store";Page({  data: {    someData: "...",  },  onLoad() {    this.storeBindings = createStoreBindings(this, {      store,      fields: ["numA", "numB", "sum"],      actions: ["update"],    });  },  onUnload() {    this.storeBindings.destroyStoreBindings();  },  myMethod() {    this.data.sum; // 来自于 MobX store 的字段  },});

三、typescript 支持

2.1.2 版本开始提供了简单的 TypeScript 支持。

新增两个构造器 api,推荐优先使用下列新版接口,你也可以继续使用旧版接口,详见接口说明。

1、ComponentWithStore

import { ComponentWithStore } from "mobx-miniprogram-binding";ComponentWithStore({  options: {    styleIsolation: "shared",  },  data: {    someData: "...",  },  storeBindings: {    store,    fields: ["numA", "numB", "sum"],    actions: {      buttonTap: "update",    },  },});

2、BehaviorWithStore

import { BehaviorWithStore } from "mobx-miniprogram-binding";export const testBehavior = BehaviorWithStore({  storeBindings: {    store,    fields: ["numA", "numB", "sum"],    actions: ["update"],  },});

四、接口

将页面、自定义组件和 store 绑定有两种方式: behavior 绑定手工绑定

1、behavior 绑定

behavior 绑定 适用于 Component 构造器。做法:使用 storeBindingsBehavior 这个 behavior 和 storeBindings 定义段。

注意:你可以用 Component 构造器构造页面, 参考文档

import { storeBindingsBehavior } from "mobx-miniprogram-bindings";Component({  behaviors: [storeBindingsBehavior],  storeBindings: {      },});

也可以把 storeBindings 设置为一个数组,这样可以同时绑定多个 store

import { storeBindingsBehavior } from "mobx-miniprogram-bindings";Component({  behaviors: [storeBindingsBehavior],  storeBindings: [    {          },    {          },  ],});

2、手工绑定

手工绑定 适用于全部场景。

做法:使用 createStoreBindings 创建绑定,它会返回一个包含清理函数的对象用于取消绑定。

注意:在页面 onUnload (自定义组件 detached )时一定要调用清理函数,否则将导致内存泄漏!

import { createStoreBindings } from "mobx-miniprogram-bindings";Page({  onLoad() {    this.storeBindings = createStoreBindings(this, {          });  },  onUnload() {    this.storeBindings.destroyStoreBindings();  },});

3、绑定配置

无论使用哪种绑定方式,都必须提供一个绑定配置对象。这个对象包含的字段如下:

字段名类型含义
store一个 MobX observable默认的 MobX store
fields数组或者对象用于指定需要绑定的 data 字段
actions数组或者对象用于指定需要映射的 actions

fields

fields 有三种形式:

  • 数组形式:指定 data 中哪些字段来源于 store 。例如 ['numA', 'numB', 'sum']
  • 映射形式:指定 data 中哪些字段来源于 store 以及它们在 store 中对应的名字。例如 { a: 'numA', b: 'numB' } ,此时 this.data.a === store.numA this.data.b === store.numB
  • 函数形式:指定 data 中每个字段的计算方法。例如 { a: () => store.numA, b: () => anotherStore.numB } ,此时 this.data.a === store.numA this.data.b === anotherStore.numB

上述三种形式中,映射形式和函数形式可以在一个配置中同时使用。

如果仅使用了函数形式,那么 store 字段可以为空,否则 store 字段必填。

actions

actions 可以用于将 store 中的一些 actions 放入页面或自定义组件的 this 下,来方便触发一些 actions 。有两种形式:

  • 数组形式:例如 ['update'] ,此时 this.update === store.update
  • 映射形式:例如 { buttonTap: 'update' } ,此时 this.buttonTap === store.update

只要 actions 不为空,则 store 字段必填。

五、注意事项

1、延迟更新与立刻更新

为了提升性能,在 store 中的字段被更新后,并不会立刻同步更新到 this.data 上,而是等到下个 wx.nextTick 调用时才更新。(这样可以显著减少 setData 的调用次数。)

如果需要立刻更新,可以调用:

  • this.updateStoreBindings() (在 behavior 绑定 中)
  • this.storeBindings.updateStoreBindings() (在 手工绑定 中)

2、与 miniprogram-computed 一起使用

miniprogram-computed 时,在 behaviors 列表中 computedBehavior 必须在后面:

Component({  behaviors: [storeBindingsBehavior, computedBehavior],  });

3、关于部分更新

如果只是更新对象中的一部分(子字段),是不会引发界面变化的!例如:

Component({  behaviors: [storeBindingsBehavior],  storeBindings: {    store,    fields: ["someObject"],  },});

如果尝试在 store 中:

this.someObject.someField = "xxx";

这样是不会触发界面更新的。请考虑改成:

this.someObject = Object.assign({}, this.someObject, { someField: "xxx" });

 

来源地址:https://blog.csdn.net/qq_31851435/article/details/129553162

--结束END--

本文标题: 微信小程序的全局状态管理 — mobx-miniprogram

本文链接: https://www.lsjlt.com/news/428668.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 微信小程序的全局状态管理 — mobx-miniprogram
    一、简介 在小程序中,常常有些数据需要在几个页面或组件中共享。使用 MobX 来管理小程序的跨页面数据,  其实类似于vuex的store。 小程序的 MobX 绑定辅助库。 此 behavior 依赖开发者工具的 npm 构建。具体...
    99+
    2023-10-11
    微信小程序 前端 小程序
  • 微信小程序全局状态是什么
    这篇文章主要讲解了“微信小程序全局状态是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序全局状态是什么”吧!前言在微信小程序中,可以利用 App.js 的 globalData ...
    99+
    2023-06-14
  • 微信小程序全局状态的深入讲解
    前言 在微信小程序中,可以利用 App.js 的 globalData 作为中间桥梁,在 Page, Component 之间,包括页面与页面,页面与组件,组件与组件之间传递需要传...
    99+
    2024-04-02
  • 微信小程序怎么实现状态管理
    微信小程序可以使用第三方库或自己实现状态管理来管理应用的状态。以下是一些常见的方法: 使用第三方库:比如使用微信官方推荐的微信小程...
    99+
    2024-04-09
    微信小程序
  • 【微信小程序】全局配置
    目录 全局配置文件及常用的配置项 全局配置 - window 1. 小程序窗口的组成部分 2. 了解 window 节点常用的配置项  3. 设置导航栏的标题 4. 设置导航栏的背景色  5. 设置导航栏的标题颜色 6. 全局开启下拉刷新功...
    99+
    2023-09-10
    微信小程序 小程序 前端 javascript 开发语言
  • 微信小程序自定义状态栏
    本文实例为大家分享了微信小程序自定义状态栏的具体代码,供大家参考,具体内容如下 首先我们需要在json文件中修改一下配置。如果我们只需要在一个页面使用自定义状态栏,我们可以在这个页面...
    99+
    2024-04-02
  • 【微信小程序】全局配置 - tabBar
    目录 全局配置 - tabBar 1. 什么是 tabBar 2. tabBar 的 6 个组成部分 3. tabBar 节点的配置项 4. 每个 tab 项的配置选项 全局配置 - 案例:配置 tabBar 1. 需求描述 2. 实现步骤...
    99+
    2023-09-03
    微信小程序 开发语言 小程序 javascript
  • 微信小程序监控点状态有哪些
    本篇内容介绍了“微信小程序监控点状态有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!将监控点包装成一个类以后,接下来应该就是设计和实现监...
    99+
    2023-06-19
  • 微信小程序做全局登录弹窗
    需求:在任意需要弹出登录的页面,后台返回需要登录状态码,弹出登录弹窗进行登录,并刷新当前页面 过程:因为微信小程序无法封装一个全局组件通过方法全局调用。因此只能封装一个公共组件,在需要弹窗的页面注册并...
    99+
    2023-10-01
    微信小程序 小程序 微信 前端
  • 微信小程序怎么使用全局js
    今天小编给大家分享一下微信小程序怎么使用全局js的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。要注意的是必须要用module...
    99+
    2023-06-26
  • 微信小程序开发 app.json全局配置
    JSON 是一种数据格式,在实际开发中,JSON 总是以配置文件的形式出现。 app.json 是当前小程序的全局配置,可以通过app.json对小程序项目进行设置所有页面路径、窗口外观、界面表现、底部 tab 等。 { "pages...
    99+
    2023-10-08
    微信小程序 前端 小程序 javascript json Powered by 金山文档
  • 微信小程序--》小程序—全局数据共享和分包
    🏍️作者简介:大家好,我是亦世凡华、渴望知识储备自己的一名在校大学生 🛵个人主页:亦世凡华、 🛺系列专栏:微信小程序 🚲座右铭:人生亦可燃烧,亦可腐败,我愿燃烧,耗尽...
    99+
    2023-09-13
    微信小程序 小程序 开发语言 前端
  • 微信小程序全局文件的使用详解
    目录全局文件总结我们前边两篇介绍了账号的申请、注册,工具的安装,云服务的开通。本篇我们介绍一下基础语法。介绍的方法呢我们会结合上微搭低代码的工具一起做个对比。因为低代码工具也产生了非...
    99+
    2022-11-13
    微信小程序全局文件 小程序全局文件
  • 微信小程序如何监听全局变量
    最近工作上遇到一个问题,有个全局变量 red_heart,因为它在很多地方用到,当它发生改变了,用到的地方也要改变。但是原生小程序并没有像Vue这种相关的做法。所以我就想自己实现一个...
    99+
    2024-04-02
  • 微信小程序怎样监听全局变量
    这篇文章主要讲解了“微信小程序怎样监听全局变量”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序怎样监听全局变量”吧!开始吧首先全局变量里肯定要先有这个 red_heartglobal...
    99+
    2023-06-14
  • 微信小程序教学系列(7)- 小程序安全和权限管理
    第七章 小程序安全和权限管理 第一节:小程序安全性保障1. 密码保护2. 数据加密3. 防止XSS攻击4. 防止CSRF攻击5. 防止信息泄露6. 审查第三方插件和组件 第二节:小程序权...
    99+
    2023-09-16
    微信小程序 小程序
  • JavaScript React 中的 Context API:理解全局状态管理
    Context API 的工作原理 Context API 创建了一个全局共享的对象,称为 Context,它持有应用程序的特定状态。组件可以通过使用 useContext hook 访问 Context,并对其中存储的数据进行订阅。任...
    99+
    2024-04-02
  • 微信小程序直播异常状态怎么获取
    本篇内容主要讲解“微信小程序直播异常状态怎么获取”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“微信小程序直播异常状态怎么获取”吧!接口说明:首次获取立马返回直播状态,往后间隔1分钟或更慢的频率去...
    99+
    2023-06-26
  • 微信小程序如何获取音乐播放状态
    这篇文章主要介绍“微信小程序如何获取音乐播放状态”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序如何获取音乐播放状态”文章能帮助大家解决问题。wx.getBackgroundAudioPla...
    99+
    2023-06-26
  • 微信小程序中如何使用全局变量
    这篇文章主要介绍微信小程序中如何使用全局变量,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!全局变量的使用每个小程序都需要在 app.js 中调用 App 方法注册小程序示例,绑定生命...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作