【Day05】0基础微信小程序入门-学习笔记

devtools/2024/11/15 5:30:31/

文章目录

  • 基础加强
    • 学习目标
    • 使用npm包
      • 1.准备项目
      • 2. 小程序对于npm的支持和限制
      • 3. Vant Weapp小程序UI组件库
      • 4. 使用Vant组件
      • 5. 定制全局主题样式
      • 6. API Promise化
    • 全局数据共享
      • 1. 简介
      • 2. MobX
        • 2.1 安装`MobX`相关包并构建`npm`
        • 2.2 创建MobX的Store实例
        • 2.3 将Store成员绑定到页面中
        • 2.4 在页面上使用Store中的成员
        • 2.5 将Store中的成员绑定到组件中
        • 2.6 在组件中使用Store中的成员
    • 分包
      • 1. 简介
      • 2. 使用分包
        • 2.1 配置方法
        • 2.2 打包原则
        • 2.3 引用原则
      • 3. 独立分包
      • 4. 分包预下载
    • 感悟

基础加强

学习目标

  • 能够知道如何安装和配置 vant-weapp 组件库
  • 能够知道如何使用 MobX 实现全局数据共享
  • 能够知道如何对小程序的 API进行 Promise

使用npm包

1.准备项目

Day05 资源我已上传,可自取

把里面的 mp_05 这个项目导入到我们的微信开发者工具

在这里插入图片描述
在这里插入图片描述

2. 小程序对于npm的支持和限制

小程序支持npm安装第三方包,但是有三个限制,因为小程序并未提供其运行环境。

  • 不支持依赖于**Node.js**内置库的包。
  • 不支持依赖于浏览器内置对象的包。
  • 不支持依赖于**C++插件**的包

3. Vant Weapp小程序UI组件库

小程序UI组件库,类似于elementUI组件库

使用的是MIT开源许可协议,对商业使用比较友好

官方文档:https://vant-ui.github.io/vant-weapp/0.x/#/intro

安装 Vant 组件库:

  • 通过npm安装,建议指定版本@1.3.3

  • 构建npm

  • 修改app.json

根据官方文档步骤一二四进行操作,三是关于ts的先不考虑

在这里插入图片描述

下面是具体操作:
在这里插入图片描述

初始化一个package.json文件:

在这里插入图片描述

指定版本号,安装vant:

安装卡住的话,可用参考这个博客http://t.csdnimg.cn/wFdmY,很有用

在这里插入图片描述
在这里插入图片描述

构建npm:

最新版本默认可用使用npm了

在这里插入图片描述

修改app.json,将下列代码删除,使用旧样式,防止组件样式混乱。

"style:"v2"

4. 使用Vant组件

app.jsonusingComponents 节点中引入需要的组件,在 wxml中直接使用组件。

比如说这个按钮组件

在这里插入图片描述

//全局app.json
"usingComponents":{"van-button":"@vant/weapp/button/index"
}
<!--页面的.wxml结构-->
<van-button type="primary">按钮</van-button>

5. 定制全局主题样式

使用CSS变量实现主题定制

CSS变量基本用法可参考MDN文档:https://developer.mozilla.org/zh-CN/docs/Web/CSS/Using_CSS_custom_properties

如果你经常用到一种颜色,那就可以把它作为一个变量,无论是使用或是修改都会很方便,不需要一个一个搜然后再去修改。这个就是CSS变量(也叫自定义属性或者级联变量)。

基本用法

定义:属性名以--开头,属性值可用是任何有效的CSS值,比如

element{--main-bg-color:blue;
}

引用:用var()包裹

element{background-color:var(--main-bg-color);
}

定制全局主题样式

app.wxss中,写入CSS变量,即可对全局生效

使用page的原因是它是根节点,每个页面都可以使用这个自定义变量;下面的变量名是vant官方文档中配置文件中按钮的背景颜色和边框颜色变量名。

 page{/* 定制警告按钮的背景颜色和边框颜色 */--button-danger-background-color:#C00000;--button-danger-border-color:#D60000;}

6. API Promise化

默认情况下,小程序官方提供的异步API都是基于回调函数实现的。容易造成回调地狱的问题,代码可读性和维护性会很差

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

安装三方包

使用miniprogram-api-promise第三方包,安装,记得指定版本号:

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

直接npm构建一下即可

使用

//在小程序入口文件中(app.js),只需调用一次promisifyAll()方法,
//即可实现异步API的promise化
import {promisifyAll} from 'miniprogram-api-promise'const wxp = wx.p = {}
//promisifyAll所有的wx的api
promisifyAll(wx,wxp)

调用Promise化的异步API

<!--页面的wxml结构-->
<van-button type="danger" bindtap="getInfo">vant按钮</van-button>
//页面的.js文件,定义对应的tap事件处理函数
async getInfo(){//对data解构赋值,赋给resconst {data:res} = await wx.p.requset({method:'get',URL:'https://www.escook.cn/api/get',data:{name:'ruru',age:18}})console.log(res)
}

全局数据共享

1. 简介

全局数据共享是为了解决组件之间数据共享的问题。

开发中常用的数据共享方案有 Vuex、Redux、MobX

在这里插入图片描述

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

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

2. MobX

2.1 安装MobX相关包并构建npm
npm install --save mobx-miniprogram@4.13.2 mobx-miniprogram-bindings@1.2.1

在这里插入图片描述

2.2 创建MobX的Store实例

根目录创建store文件夹,创建一个store.js文件

//在这个js文件中专门创建store的实例对象
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}),
})
2.3 将Store成员绑定到页面中

思路分三步:导入成员,onload绑定,unload清除

// pages/message/message.js
import { action } from 'mobx-miniprogram'
import {createStoreBindings} from 'mobx-miniprogram-bindings'
import {store} from '../../store/store'Page({/*** 生命周期函数--监听页面加载*/onLoad: function (options) {//将字段和方法绑定到this上this.storeBindings =  createStoreBindings(this,{store,fields:['numA','numB','sum'],actions:['updateNum1']})},/*** 生命周期函数--监听页面卸载*/onUnload: function () {this.storeBindings.destoryStoreBindings()}
}
2.4 在页面上使用Store中的成员
<!--pages/message/message.wxml-->
<view>{{numA}} + {{numB}} = {{sum}}</view>
<van-button type="primary" bindtap="btnHandler1" data-step="{{1}}">
numA + 1
</van-button>
<van-button type="danger" bindtap="btnHandler1" data-step="{{-1}}">
numA - 1
</van-button>
//message.js 
btnHandler1(e){this.updateNum1(e.target.dataset.step)},

在这里插入图片描述

2.5 将Store中的成员绑定到组件中

步骤三步:按需导入、behaviors数组、storeBindings接收三个属性

根目录创建一个components组件,在里面创建一个numbers文件夹,在numbers文件夹中创建一个叫numbers的组件。

在这里插入图片描述

app.json中注册一下这个组件

"usingComponents":{"van-button":"@vant/weapp/button/index","my-numbers":"./components/numbers/numbers"
}

message组件中使用这个numbers组件

<!--message.wxml-->
<my-numbers></my-numbers>

现在我们要开始绑定组件了

// components/numbers/numbers.js
import {storeBindingsBehavior} from 'mobx-miniprogram-bindings'
import {store} from '../../store/store'
Component({behaviors:[storeBindingsBehavior], // 通过storeBindingsBehavior 来实现自动绑定storeBindings:{store,fields:{numA:()=>store.numA,numB:(store)=>store.numB,sum:'sum'},actions:{//指向store中的updateNum2updateNum2:'updateNum2'}}
})
2.6 在组件中使用Store中的成员
<view>{{numA}} + {{numB}} = {{sum}}</view>
<van-button type="primary" bindtap="btnHandler2" data-step="{{1}}">
numB + 1
</van-button><van-button type="danger" bindtap="btnHandler2" data-step="{{-1}}">
numB - 1
</van-button>
//组件的方法列表
methods:{btnHandler2(e){this.updateNum2(e.target.datatset.step)}
}

分包

1. 简介

完整的小程序项目,按需求划分为不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载

分包的好处

  • 优化小程序首次启动的下载时间
  • 多团队共同开发时可更好的解耦协作

分包前项目构成

在这里插入图片描述

分包后项目构成

在这里插入图片描述

分包的加载规则

  • 当小程序启动时,默认下载主包并启动主包内页面。tabBar页面需要放到主包中
  • 当用户进入分包内某页面时,客户端下载对应分包,下载完成后再进行展示。

分包的体积限制

整个小程序所有分包大小不超过16M(主包+所有分包)。单个分包/主包的大小不超过2M

2. 使用分包

2.1 配置方法

在这里插入图片描述

还要再app.json中的subpackages节点中声明分包的结构。里面包含几个对象,就是代表有几个分包。

下面有两个对象,也就是证明这个项目有两个分包。

在这里插入图片描述

查看分包的体积

在这里插入图片描述

2.2 打包原则
  • 小程序会按 subpackages 的配置进行分包,subpackages 之外的目录将被打包到主包中。
  • 主包也可以有自己的 pages(即最外层的pages字段)。
  • tabBar 页面必须在主包内。
  • 分包之间不能互相嵌套。
2.3 引用原则
  • 主包无法引用分包内的私有资源
  • 分包之间不能相互引用私有资源
  • 分包可以引用主包内的公共资源

3. 独立分包

本质也是主包,可独立于主包和其它分包而单独运行。

在这里插入图片描述

独立分包和普通分包的区别:是否依赖于主包才能运行。普通分包依赖于主包,独立分包可独立运行。

开发者可用按需将某些具有一定功能独立性的页面配置到独立分包中(比如说登录注册页面)。这样可以很大程度上提升分包页面的启动速度

一个小程序可以有多个独立分包。

独立分包和普通分包的配置区别就是有没有如下代码:

//app.json
{	"root":"moduleA","pages":["pages/pear","pages/pineapple"],"independent":true  //通过此节点,声明当前分包为‘独立分包’。
}

独立分包和普通包以及主包之间相互隔绝,不能相互引用彼此的资源!独立分包不能引用主包内的公共资源!

4. 分包预下载

在进入小程序的某个页面时,由框架自动下载可能需要的分包,从而提升进入后续分包页面时的启动速度。

预下载分包的行为,会在进入指定的页面时触发。在app.json中,使用preloadRule节点定义分包的预下载规则

{"preloadRule":{ //分包预下载的规则"pages/contact/contact":{  //触发预下载的页面路径//network表示在指定的网络环境进行预下载。可选值为all、wifi,默认为wifi。"network":"all",//packages 进入页面下载哪些包,可通过root或name指定"packages":["pkgA"]}}
}

分包预下载限制

同一个分包中的页面享有共同的预下载大小限额2M

在这里插入图片描述

感悟

学习起来和Vue有很多相似之处呢。基础知识到这里就全部结束了,要及时复习喔,多加练习,下一步就着手小项目了。

掌握学习目标,代码多加练习

如有错误请指正
在这里插入图片描述


http://www.ppmy.cn/devtools/94168.html

相关文章

分布式锁实现方案--redis、zookeeper、mysql

分布式锁的几种实现方式 悲观锁和乐观锁分布式锁的实现要求 -- 互斥性、避免死锁、可重入性、高可用行、性能互斥-只能有一个客户端持有锁 -- redis setnx避免死锁引入过期时间 -- redis ttl锁过期问题 -- 自动续期 -- redis释放别人锁问题 -- 锁附加唯一性 -- 给每个客户端设置…

Leetcode面试经典150题-112.路径总和

解法都在代码里&#xff0c;不懂就留言或者私信 超级简单的题&#xff0c;不过有隐形的坑 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.v…

14.3 Matplotlib与Seaborn数据可视化

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、应用领域等内容。 ⭐…

vscode 目录管理

目录 命令行打开新目录: 新窗口打开新目录 使用快捷键 Ctrl + K, Ctrl + O 按 Ctrl + P快速定位目录 输入目录路径 开头 并以 / 结尾。例如,输入 aaa/。 使用 VS Code 插件 Project Manager 3. 管理和切换常用目录 快速打开文件 Favorites插件 常用目录收藏,可以右…

建议收藏!这4款设计师常用的素材管理软件,助你工作效率翻倍!

嘿&#xff0c;设计师们&#xff01;你是否还在为那一堆堆散乱的素材头疼&#xff1f;每次灵感来袭&#xff0c;却要花费大量时间在层层文件夹中苦苦搜寻&#xff1f;别急&#xff0c;今天我就来给大家推荐4款超给力的素材管理软件&#xff0c;它们不仅能帮你轻松整理素材库&am…

Broken: Gallery靶机复现

靶机设置 靶机设置为NAT模式 靶机IP发现 nmap 192.168.112.0/24 靶机IP为192.168.112.142 目录扫描 dirsearch 192.168.112.142 访问浏览器 发现文件页面 查看后发现都没什么用 getshell hydra -L rockyou.txt -P rockyou.txt 192.168.112.142 ssh 尝试爆破ssh账号密码…

【xilinx】闩锁中的时间借用

静态时序分析将时间借用概念应用于基于锁存器的设计。这篇博文解释了时间借用的概念&#xff0c;并与您的设计有锁存器且时序报告中有时间借用的情况相关。 然后我们进一步解释 STA 工具如何运用这一概念。 让我们考虑一个周期为 10 的时钟&#xff0c;占空比为 50%&#xf…

Golang面试题六(GMP)

目录 1.Go线程实现模型 1:1 关系 N:1关系 M:N关系 2.GM模型 3.GMP模型 概念 模型简介 有关P和M的个数问题 P和M何时会被创建 4.调度器的设计策略 5.go func() 调度流程 6.调度器的生命周期 7.Go work stealing 机制 8.Go hand off 机制 9.Go 抢占式调度 9.Sys…