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

news/2024/7/7 21:05:46

文章目录

    • 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
  },
  // actions
  updateNumA: 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://lihuaxi.xjx100.cn/news/823497.html

相关文章

Java 8和Java 9对接口的增强

Java 8和Java 9对接口的增强需要说明的是&#xff0c;前面介绍的都是Java 8之前的接口概念&#xff0c;Java 8和Java 9对接口做了一些增强。在Java 8之前&#xff0c;接口中的方法都是抽象方法&#xff0c;都没有实现体&#xff0c;Java 8允许在接口中定义两类新方法&#xff1…

Java面向对象:封装特性的学习

本篇文章接受了Java面向对象的封装特性,什么是封装,封装的体现,Java四种访问权限修饰符的介绍 介绍了Java中的包,什么是包,如何导入包中的类,包的访问权限以及认识Java内常见的包 Java面向对象封装特性一.认识面向对象特性: 封装1.什么是封装?2.Java内封装的体现3.Java四种访问…

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

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

春天又来了,做好自己的一年之计

春天来了&#xff0c;温暖的阳光普照大地。百花争艳&#xff0c;正如一幅五彩斑斓的画卷&#xff0c;一遍又一遍将景色熠熠生辉。新鲜的空气中充满了花草树木的香味&#xff0c;令人感到神清气爽。春意盎然&#xff0c;鲜花释放出浓郁的芬芳&#xff0c;伴随着小鸟鸣叫令人心旷…

如何制作启动U盘安装系统?

用户问题&#xff1a;新手自己用U盘怎么装系统 很多用户对电脑莫名有种小心翼翼的感觉&#xff0c;总担心整崩溃。其实电脑就跟手机差不多&#xff0c;常见的操作不会影响电脑正常运行&#xff0c;而重要的操作几乎都有操作提示或说明&#xff0c;对于用户使用来说它其实没有那…

SpringCloud系列 Nacos配置管理

在Nacos中添加配置信息&#xff1a; 工程引入&#xff1a; nacos配置管理依赖 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> bootstrap.yml&a…

SV中的关键词使用virtual,cast

virtual SV不允许一个子类句柄指向父类对象,但是可以让一个父类句柄指向子类对象。由于父类句柄只能访问父类的成员变量和方法,不利于验证环境的复用;所以为了让继承了同一父类的子类能将一个同名方法扩展为不同功能的方法,利用类的多态,将父类中的方法声明为virtual,而指…

算法刷题 Day 31 | ● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和

贪心算法其实就是没有什么规律可言,所以大家了解贪心算法 就了解它没有规律的本质就够了。 不用花心思去研究其规律, 没有思路就立刻看题解。 基本贪心的题目 有两个极端,要不就是特简单,要不就是死活想不出来。 学完贪心之后再去看动态规划,就会了解贪心和动规的区别。…