微信小程序API的Promise化及全局状态管理MobX

news/2025/2/15 19:25:24/

文章目录

    • API的Promise化
        • 创建promise化的对象
    • 全局状态管理
        • 创建
        • 页面中绑定
        • 页面中使用
        • 组件中绑定
        • 组件中使用

API的Promise化

默认情况下小程序官方提供的API都是基于回调函数实现的,例如

wx.request({method:'',url:'',data:{},success:()=>{},fail: ()=>{},complete: ()=>{}
})

为了避免回调地狱的问题,我们将小程序的API Promise化

小程序中的Promise主要依赖于miniprogram-api-promise三方npm包

每次装完新包要记得重新构建npm,同时建议重新构建前先删除miniprogram_npm这个文件

创建promise化的对象

// app.js
import {promisifyAll} from 'miniprogram-api-promise'
// 创建wxp和wx.p用于存放封装好的api
const wxp = wx.p = {}
promisifyAll(wx,wxp)

全局状态管理

即解决组件之间数据共享的问题,常用的全局共享解决方案有:Vuex、Redux、MobX等

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

  • mobx-miniprogram用于创建store实例对象
  • mobx-miniprogram-bindings用于将store中的共享数据或方法,绑定到组件或页面中使用
npm i --save mobx-miniprogram@4.13.2 mobx-miniprogram-bindings@1.2.1

创建

在根目录创建store文件夹,内部含store.js

// 该文件用于创建store实例
import {action, observable} from 'mobx-miniprogram'export const store = observable({// 数据字段numA: 1,numB: 2,// 计算属性get sum(){return this.numA + this.numB},// actionsupdateNumA: action(function(step){this.numA += step})
})

页面中绑定

  1. 导入
  2. onLoad周期进行绑定
  3. onUnload周期进行清理
import {createStoreBindings} from 'mobx-miniprogram-bindings'
import {store} from '../../store/store'onLoad: function (options) {// createStoreBindings(实例,配置对象)// 配置对象:store数据源;fields数据;actions方法this.storeBindings = createStoreBindings(this,{store,fields:['numA','numB','sum'],actions:['updateNumA']})
},
onUnload: function () {this.storeBindings.destroyStoreBindings()
},

页面中使用

<view>{{numA}} + {{numB}} = {{sum}}</view>
<van-button type="primary" bindtap="btnClick" data-step="{{1}}"> numA+1 </van-button>
<van-button type="danger" bindtap="btnClick" data-step="{{-1}}"> numA-1 </van-button>
btnClick(e){this.updateNumA(e.target.dataset.step)
},

组件中绑定

import { storeBindingsBehavior } from 'mobx-miniprogram-bindings'
import { store } from '../../store/store'Component({// 自动绑定behaviors:[storeBindingsBehavior],storeBindings:{store,fields:{numA: ()=> store.numA, // 绑定字段第一种方式numB: (store)=>store.numB, // 绑定字段第二种方式sum:'sum' // 绑定字段第三种方式},actions:{updateNumB:"updateNumB"}}
})

组件中使用

同页面的使用方法


http://www.ppmy.cn/news/22676.html

相关文章

优思学院|月入一万以上是常态吗?质量人如何自我提升?

近日&#xff0c;“月入过万的人在中国属于什么水平”引发讨论。根据一些数据显示&#xff0c;放眼全国&#xff0c;月工资水平能達到1万的不是大家想象中的那么多。 不过&#xff0c;月薪一万元人民币在一些特定行业&#xff0c;如科技、金融和管理领域&#xff0c;又或者地点…

实验十二、静态工作点稳定电路频率响应的研究

一、题目 研究旁路电容和静态工作点分别对 QQQ 点稳定电路频率响应的影响。 二、仿真电路 仿真电路如图1所示。晶体管采用高频小信号晶体管 ZTX325&#xff08;该晶体管位于RF处&#xff09;。 (a)电路的低频特性(a)\,\,电路的低频特性(a)电路的低频特性(b)旁路电容Ce变化(b…

贝叶斯算法学习与记录第一弹

文章目录一、贝叶斯算法起源二、贝叶斯主要解决的问题三、为什么使用贝叶斯四、问题&#xff1a;五、贝叶斯公式&#xff1a;六、拼写纠正例子&#xff1a;七、模型比较理论八、垃圾邮件过滤实例一、贝叶斯算法起源 贝叶斯算法源于一个叫贝叶斯的人为了解决“逆概”问题而创作…

并发之美

在我们日常生活中&#xff0c;事情应该一件一件的做&#xff0c;但是我们会感觉这样不仅效率低下&#xff0c;而且还特别累人&#xff0c;我们何不转换思想&#xff0c;看下图&#xff1a;我们可以在烧开水的时候&#xff0c;顺便把洗茶具、拿茶叶的事情做了&#xff0c;这样是…

Leetcode:416. 分割等和子集、1049. 最后一块石头的重量 II(C++)

目录 416. 分割等和子集 问题描述&#xff1a; 实现代码与解析&#xff1a; 动态规划&#xff08;01背包问题&#xff09;&#xff1a; 原理思路&#xff1a; 1049. 最后一块石头的重量 II 问题描述&#xff1a; 实现代码与解析&#xff1a; 动态规划&#xff08;01背…

【Leetcode】面试题 08.05. 递归乘法、HJ55 挑7

作者&#xff1a;小卢 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 目录 面试题 08.05. 递归乘法 HJ55 挑7 面试题 08.05. 递归乘法 面试题 08.05. 递归乘法 题…

笔记:Space-time Neural Irradiance Fields for Free-Viewpoint Video

论文标题&#xff1a;自由视角的时空神经辐射&#xff08;发光&#xff09;场 创新点 使用RGBD单目视频&#xff08;2.5D&#xff09;表示时空。引入对场景深度的监督解决运动模糊问题。 &#xff08;本文仅介绍对NeRF的改进部分&#xff09; 深度重建损失 问题&#xff1…

npm的知识要点

前端开发趋向于分散隔离&#xff0c;多以组件、包的形式来进行。虽然不使用node、npm、webpack、babel等工具依然可以进行前端开发&#xff0c;但这是远离和拒绝新技术、新理念的做法。 npm(node package manage)是基于共享理念的实践、基于node的JavaScript编写的包管理工具&a…