118.【微信小程序 - 02】(六)

简介: 118.【微信小程序 - 02】

3.使用 npm 包 -API Promise 化

(1). 基于回调函数的异步 API 的缺点

默认情况下,小程序官方提供的异步API 都是基于回调函数实现的,列如: 网络请求的API需要按照如下的方式调用:

wx.request({
  method: '',
  url:'',
  data:{},
  success:()=>{},  // 请求成功的回调函数
  fail:()=>{},  // 请求失败的回调函数
  complete:()=>{} // 请求完成的回调函数
})

缺点: 容易造成回调地狱的问题,代码的可读性、维护性差!

(2).什么是 API Promise 化

API Promise化,指的是提供额外的配置,将官方提供的、基于回调函数的异步API,升级改造为基于Pormise的异步API,从而提高代码的可读性、维护性,维护性,避免回调地狱的问题。

(3).实现 API Promise化

在小程序中,实现API Promise化主要依赖于 miniprogram-api-promise这个第三方的npm包。

npm i --save miniprogram-api-promise@1.0.4

记住: 我们每次在微信小程序安装一个包,我们不能够立马进行使用,我们需要重新构建npm。

第一步: 删除包

第二步 重新构建

第三步: 成功之后

(4).使用 API Promise 化
  1. 第一步在 app.js中引入

app.js

在小程序入口文件中(app.js),只需调用一次promisifyAll()方法.即可实现异步 API 的promise化。

// app.js
import {promisifyAll} from 'miniprogram-api-promise'
const wxp=wx.p={}
promisifyAll(wx,wxp)

  1. 在home.wxml

hoem.xml 绑定方法

<!--pages/home/home.wxml-->
<text class="t1">首页</text>
<van-button type="primary" bindtap="getinfo">默认按钮</van-button>
  1. 在home.js
Page({
  async getinfo(){
    const res= await wx.p.request({
      method:'GET',
      url:'https://applet-base-api-t.itheima.net/api/get',
      data:{
        name:'zs',
        age:20
      }
    })
    console.log(res)
  },
})

不去掉关键字

去掉关键字

(八)、全局数据共享

1.全局数据共享 - 概述

全局数据共享 (又叫做: 状态管理)是为了解决组件之间数据共享的问题。

开发中常用的全局数据共享方案有: Vuex、Redux、MobX等等。

(1).小程序中的全局数据共享方案

在小程序中,可使用 mobx-miniporgram 配合 mobx-miniporgram-bindings 实现全局数据共享。

  • mobx-miniporgram 用来创建Store实列对象
  • mobx-miniporgram-bindings 用来把Store中的共享数据或方法,绑定到组件或页面中使用

2.全局数据共享 - MobX

(1).安装MobX相关的包

在项目中运行如下的命令,安装MobX相关的包:

npm install --save mobx-miniprogram@4.13.2 mobx-miniprogram-bindings@1.2.1

删除目录树下的包

构建npm的包

(2).创建MobX的Store实列

store/store.js

// 在这个js文件中,专门来常见Store的实列对象
import { action, observable } from "mobx-miniprogram";  // 引入MobX,这里的数据都不能自定义
// 抛出 Mobx
export const store = observable({
      // 共享下面的变量
        // (1).共享数据字段
      numA:1,
      numB:2,
        // (2).计算属性 -》 关键字 get 表示这个计算属性是只能 读取的。
       get sum(){
         return this.numA+this.numB
       },
       //  (3).actions 方法 用来修改store中的数据
       updateNum1:action(function(step){  // 第一个是 自定义方法名, 第二个是 action
         this.numA+=step
       }),
       updateNum2:action(function(step){
        this.numB+=step
      })  
})
(3).将Store中的成员绑定到页面中

home.wxml

// 1. 导入包和实列对象 
import { createStoreBindings } from 'mobx-miniprogram-bindings';
import { store } from '../../store/store';
Page({
  /**
   * 页面的初始数据
   */
  data: {
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 绑定
   this.storeBindings= createStoreBindings(this,{
      store, // 1.实列对象
      fields:['numA','numB','sum'], // 2. 我们在store.js中定义的属性
      actions:['updateNum1','updateNum2'] // 3. 我们在store.js中定义的方法
    })
  },
  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
  // 解除绑定
    this.storeBindings.destoryStoreBindings()
  },
})


相关文章
|
4月前
|
小程序
浅谈提高微信小程序的应用速度
浅谈提高微信小程序的应用速度
|
5月前
|
小程序
微信小程序——
微信小程序——
41 1
|
存储 小程序
微信小程序-touches和changedTouches
在经过上一篇文章的介绍,已经清楚的了解了data与mark的区别,本章将要介绍的也是事件对象当中的两个属性,分别是,touches与changedTouches。
165 0
|
8月前
|
小程序 JavaScript 前端开发
微信小程序5
微信小程序5
112 0
|
小程序 JavaScript
118.【微信小程序 - 02】(三)
118.【微信小程序 - 02】
81 0
|
小程序
118.【微信小程序 - 02】(九)
118.【微信小程序 - 02】
82 0
|
存储 小程序 前端开发
118.【微信小程序 - 02】(五)
118.【微信小程序 - 02】
92 0
118.【微信小程序 - 02】(五)
|
小程序 前端开发 安全
117.【微信小程序 - 01】(八)
117.【微信小程序 - 01】
235 0
|
JSON 小程序 JavaScript
117.【微信小程序 - 01】(二)
117.【微信小程序 - 01】
81 0
|
存储 小程序 JavaScript
118.【微信小程序 - 02】(二)
118.【微信小程序 - 02】
67 0