https://youzan.github.io/vant-weapp
// app.json 文件
"usingComponents": {
"van-button": "@vant/weapp/button/index"
}
// wxml文件
按钮
// app.wxss
page {
--button-danger-background-color: #C00000;
--button-danger-border-color: #D60000;
}
wx.request({
method: '',
url: '',
data: {},
success: ()=>{},
fail: ()=>{},
complete: ()=>{}
})
缺点:容易造成回调地狱的问题,代码的可读性、维护性查。
2. 什么是API Promise化
API Promise化,就是通过额外的配置,将官方提供的、基于回调函数的异步API,升级改造为基于Promise的异步API,从而提高代码的可读性、维护性,避免回调地狱的问题。
3. 实现API Promise化
在小程序中,实现API Promise主要依赖于miniprogram-api-promise这个第三方的npm包。它的包装和使用步骤如下:
npm i --save [email protected]
import {promisifyAll} from 'miniprogram-api-promise'
const wxp = wx.p = {}
promisifyAll(wx, wxp)
在小程序的app.js文件,只需调用一次 promisifyAll 方法,即可实现异步API的Promise化。
4. 调用Promise之后的异步API
按钮
async getInfo() {
const {data:res} = await wx.p.request({
method: 'GET',
url: '',
data: {name: 'zs', age: 18}
});
console.log(res);
}
全局数据共享又叫做状态管理,是为了解决组件之间数据共享的问题。
常用的数据共享方案有:Vuex、Redux、Mobx
在小程序中,可使用mobx-miniprogram配合mobx-miniprogram-bindings实现全局数据共享。
npm install --save [email protected] [email protected]
import {observable, action} from 'mobx-miniprogram'
export const store = observable({
// 数据字段
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;
}),
})
// 页面的.js文件
import {createStoreBindings} from 'mobx-miniprogram-binding'
import {store} from '../../Store/store'
Page({
onLoad: function() {
this.storeBindings = createStoreBindings(this, {
store,
fields: ['numA', 'numB', 'sum'],
actions: ['updateNum1', 'updateNum2']
})
},
onUnload: function() {
this.storeBindings.destroyStoreBindings()
}
})
{{numA}} + {{numB}} = {{sum}}
numA + 1
numA - 1
btnHandler1(e) {
this.updateNum1(e.target.dataset.step);
},
可以为组件提供data-*自定义属性传参,其中*代表的是参数的名字。
info 会被解析为 参数的名字
数值 2 会被解析为 参数的值
在事件处理函数中,通过event.target.dataset.参数名获取到具体参数的值。
5. 将Store的成员绑定到组件中
import {storeBindingsBehavior} from 'mobx-miniprogram-bindings'
import {store} from '../../Store/store'
Component({
behaviors: [storeBindingsBehavior], // 通过storeBindingsBehavior来实现自动绑定
storeBindings: {
store, // 指定要绑定的store
fields: { // 指定要绑定的字段数据
numA:()=>store.numA, // 绑定字段的第1种方式
numB:(store)=>store.numB, // 绑定字段的第2种方式
sum: 'sum' // 绑定字段的第3种方式
},
actions: { // 指定要绑定的方法
updateNum2: 'updateNum2'
}
}
})
// 组件的wxml结构
{{numA}} + {{numB}} = {{sum}}
numB + 1
numB - 1
btnHandler2(e) {
this.updateNum2(e.target.dataset.step);
},
分包指的是把一个完整的小程序项目,按照需求划分为不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载。
分包前,小程序项目中所有的页面和资源都被打包到了一起,导致整个项目体积过大,影响小程序首次启动的下载时间。
分包后,小程序项目由1个主包+多个分包组成:
{
"pages":[
"pages/home/home"
],
"subPackages": [
{
"root": "packageA",
"name": "p1",
"pages": [
"pages/cat/cat",
"pages/dog/dog"
]
},
{
"root": "packageB",
"name": "p2",
"independent": true,
"pages": [
"pages/apple/apple",
"pages/pear/pear"
]
}
],
"tabBar": {
"list": [
{
"pagePath": "pages/home/home",
"text": "首页",
"iconPath": "/images/tabs/home.png",
"selectedIconPath": "/images/tabs/home-active.png"
}
]
},
"usingComponents": {
"van-button": "@vant/weapp/button/index",
"my-numbers": "./components/numbers/numbers"
}
}
{
"preloadRule": { // 分包预下载的规则
"pages/contact/contact": { // 触发分包预下载的页面路径
// network表示在指定的网络模式下进行预下载
// 可选择:all(不限网络) 和 wife(仅wife模式下进行下载)
// 默认值:wife
"network": "all",
// packages:表示进入页面后,预下载哪些分包
// 可以通过root或name指定预下载哪些分包
"packages": ['packageA']
}
}
}