小程序提升篇-npm、数据共享、分包、自定义tabBar

news2025/1/13 13:49:40
    • npm 包的使用

1.1 npm限制

小程序支持npm第三方包,提高开发效率,有以下三种限制:

  • 不支持依赖node.js内置库包

  • 不支持依赖浏览器内置对象的包

  • 不支持依赖C++插件的包

限制较多,因此小程序可以使用的包不多

1.2 Vant Weapp

是一套开源的小程序UI组件库,使用MIT开源许可协议,对商业使用比较好

官网:https://vant-ui.github.io/vant-weapp/#/quickstart

1.2.1 安装

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

终端-- npm init -y -- npm i @vant/weapp -S --production

  • 构建npm包

微信开发者工具--工具--构建npm

  • 修改app.json

删除app.json中的“style”:"v2"

1.2.2 使用Vant组件

在app.json中usingComponents节点中引入组件,即可在wxml文件中直接使用

  "usingComponents": {
    "van-button": "@vant/weapp/button/index"
  }
<van-button type="primary">按钮</van-button>

1.2.3定制全局主题样式

自定义变量:属性名需要以--开始

--main-color: pink;

使用变量:用var()函数包裹

div {
    background-color: var(--main-color);
}
  • 在app.wxml中写入css变量,对全局样式生效

page {
    --button-border-radius: 10px;
    --button-default-color: #f2f3f5;
    --toast-max-width: 100px;
    --toast-background-color: pink;
}

每个页面的根节点是page

1.3 API Promise化

异步API的缺点:小程序提供的异步API都是基于回调函数实现的,例如网络请求的API,容易照成回调地狱的问题,代码可读性维护性差

API的promise化:通过额外的配置将同步api改为异步的api

1.3.1 实现API Promise

主要依赖于minprogram-api-promise这个npm包

  • 终端:npm i --save miniprogram-api-promise@1.0.4

  • 在小程序入口文件app.js中,只调用一次promisifyAll() 方法

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

举个例子

<van-button type="primary" bindtap="getInfo">按钮</van-button>
 async getInfo() {
    const res = await wx.p.request({
        method: 'GET',
        url: 'https://www.escook.cn/api/get',
        data: {
            name: 'rose',
            age: 18
        }
    })
    console.log(res);
  },
    • 全局数据共享

全局数据共享(状态管理):解决组件之间数据共享的问题

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

2.1小程序数据共享

使用mobx-miniprogram 配合mobx-miniprogram-bindings实现数据共享

  • mobx-miniprogram:创建store实例对象

  • mobx-miniprogram-bindings:把store中的共享数据和方法,绑定到组件或组件页面中

2.2 MobX

2.2.1安装

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

注意:安装完毕后,要删除miniprogram_npm目录后,重新构建npm

2.2.2 创建MobX的Store实例

在根目录store/store.js

// 在js文件专门创建store实例对象
import {action, observable} from 'mobx-miniprogram'
export const store = observable({
    // 数据字段
    numA: 1,
    numB: 2,
    // 计算属性
    get sum() {
        return this.numA + this.numB
    },
    // action方法,修改sore中的数据
    updateNum1: action(function(step){
        this.numA += step
    }),
    updateNum2: action(function(step){
        this.numB += step
    })
})

2.2.3 将store 中的成员绑定到页面

// logs.js
import {createStoreBindings} from 'mobx-miniprogram-bindings'
import {store} from '../../store/store'

Page({
  onLoad() {
    this.storeBingds = createStoreBindings(this,{
        store,
        fields: ['numA','numB','sum'],
        actions: ['updateNum1','updateNum2']
    })
  },
  onUnload: function() {
      this.storeBingds.detroySoreBindgings()
  }
})

2.2.4 在页面上使用store成员

  <view>
      numA:{{numA}} + numB:{{numB}} = {{sum}}
  </view>
  <van-button type="primary" bindtap="handleA" data-step = "{{1}}">加一</van-button>
  <van-button type="primary" bindtap="handelB" data-step ="{{-1}}">减一</van-button>
  handelA(e) {
      this.updateNum1(e.target.dataset.step)
  },
  handelB(e) {
      this.updateNum2(e.target.dataset.step)
  },

2.4.5 在组件上使用store

// component/test/test1.js
import {createBindingsBehavior} from 'mobx-miniprogram-bindings'
import {store} from '../../store/store'
const myBeha = require('../../behavior/my-behavior')

Component({
    behaviors: [myBeha,createBindingsBehavior],
    storeBindings: {
        store,
        fields: {
            // 绑定字段有以下三种方式
            numA: () => store.numA,
            numB: (store) =>store.numB,
            sum: 'sum'
        },
        actions:{
            updateNum1: 'updateNum1',
            updateNum2: 'updateNum2'
        }
    },
})

使用方法同2.2.4

    • 分包

3.1 基本概念

分包指的是一个完整的小程序项目,按照需求划分不同的子包,用户使用时按需加载

好处:

  • 优化小程序首次启动的下载时间

  • 在多团队共同开发时更好的解耦协作

分包前项目的构成:所有页面和资源打包在一起

分包后的项目构成:

由1个主包和多个1分包组成

  • 主包:项目的启动页面或者是TabBar页面,以及所有分包用到的公共资源

  • 分包:只包含当前包有关的页面和资源

分包的加载规则

在小程序启动时,默认下载主包并启动主包内页面

  • TabBar页面放入主包中

  • 进入分包是,客户端会把对应的分包下载下来

  • 非TarBar页面按照功能的不太,划分为不同的分包按需下载

分包的体积限制

  • 小程序所有分包不超过20M(主包+分包)

  • 单个分包/主包大小不超过2M

3.2 分包的使用

//app.json  
"subPackages": [
      {
          "root": "pkgA",
          "name": "packageA",
          "pages": [
              "page/cat/cat"
          ]
      }
  ],

打包原则

  • 按照subpackages进行分包,其他目录打包为主包

  • 主包也有自己的pages

  • tabBar页面必须在主包内

  • 分包之间不能相互嵌套

引用原则

  • 主包无法引用分包内资源

  • 分包之前不能相互引用私有资源

  • 分包可以引用主包内公共资源

3.3 独立分包

独立分包本质上也是分包,可以独立于主包和分包而单独运行

独立分包和普通分包的区别:

  • 主要区别是:是否依赖于主包运行

  • 独立分包可以在不下载主包下运行

运用场景:

  • 普通分包在页面启动时需要先下载主包

  • 独立分包不依赖主包,提升了启动分包的速度

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

配置方法:

在subpackage下面添加independen: true即可

引用原则:

独立分包和普通分包和主包之前是相互隔绝的,不能相互引用彼此资源

  • 主包/普通分包不能引用独立分包的私有资源

  • 独立分包之间不能相互引用私有资源

  • 特别注意:独立分包不能引用主包公共资源

3.4 分包预下载

分包预下载是进入小程序页面时,由框架自动预下载可能需要用到的分包,提升后续进入分包的速度

分包预下载的行为会进入指定页面时触发,在app.json下proloadRule节点

//app.json
  "preloadRule": {
      "pages/cat/cat": {
          "network": "all", //网络模式下下载,all/wifi(默认)
          "packages": ["pgkA"] //root和name指定分包
      }
  },

同一个分包中的页面预下载大小限制2M

4. 自定义tabBar

4.1 配置信息

\\app.json
{
  "tabBar": {
    "custom": true,
    "color": "#000000",
    "selectedColor": "#000000",
    "backgroundColor": "#000000",
    "list": [{
      "pagePath": "page/component/index",
      "text": "组件"
    }, {
      "pagePath": "page/API/index",
      "text": "接口"
    }]
  },
  "usingComponents": {}
}

注意:list配置不用删除,为了适配低版本兼容

自定义组件使用Vant Weapp组件时,需要开启styleLIsolation: 'share'选项

注:以上笔记来源于黑马程序员

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/191624.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

带你读懂——频率响应与采样频率之间的关系

频响范围 频率响应&#xff1a;不同频率下的输入信号经过系统后响应之后的输出信号增益。大白话就是&#xff0c;输入信号频率是xxx Hz&#xff0c;幅值为yyy mg&#xff0c;观察此时的输出信号幅值为AyAyAy mg&#xff0c;此时升高或降低了AAA倍。 电压增益计算公式&#xff…

浅读人月神话笔记(2)

读书笔记&#xff1a;今日翻书浅读&#xff0c;从《为什么巴比伦塔会失败》开始至《干将莫邪》结束&#xff0c;巴比伦塔的建造对当下项目推进有广泛借鉴意义&#xff0c;今天这几个章节在PMBOK中有一些可以互相对照学习的内容&#xff0c;《为什么巴比伦塔会失败&#xff1f;》…

RPA自动化办公04——软件自动化(excel,word,浏览器)

参考&#xff1a;软件自动化_UiBot开发者指南 虽然我们可以使用前面的鼠标点击等操作打开excel表然后写入什么的&#xff0c;但是直接用Uibot里面的命令会更方便。 Excel 在旁边的命令里面打开excel簿 随便选一个excel表实验一下&#xff0c;然后读取区域&#xff0c;可以选。…

使用字典快速获取唯一值与重复值【单个字典对象】

在以前的博客《使用字典快速获取唯一值与重复值&#xff08;交集与并集&#xff09;》使用多个字典对象获取交集与并集&#xff0c;最近有同学提问&#xff0c;是否可以只使用一个字典对象实现相同的功能&#xff0c;对于有“编程洁癖”的同学来说&#xff0c;可能不喜欢使用多…

记录:windows+opencv3.4.16+vs2013+cmake编译

环境&#xff1a;vs2013,x64&#xff0c;opencv3.4.16&#xff0c;cmakeopencv官网&#xff1a;https://opencv.org/releases/1、opencv source下载&#xff1a;因为想用vs2013&#xff0c;现在opencv官网windows版安装包只有vc14和vc15了&#xff0c;只能自己编译了。找一个自…

良心无广的3款软件,每一款都逆天好用,且用且珍惜

闲话少说&#xff0c;直上干货&#xff01; 1、清浊 清浊是一款强大到离谱的国产手机清理APP&#xff0c;追求简约至上&#xff0c;界面非常清爽&#xff0c;无任何弹弹屏广告&#xff0c;值得关注的是&#xff0c;这款软件完全免费使用&#xff0c;常规清理、应用清理、空文件…

活体识别4:论文笔记之《Face Spoofing Detection Using Colour Texture Analysis》

说明 本文是我对论文《Face Spoofing Detection Using Colour Texture Analysis》做的一个简单笔记。 这个论文是芬兰奥卢大学(Oulu)课题组的一篇很有代表性的论文&#xff0c;写于2016年&#xff0c;使用的是“手工特征SVM分类器”这种比较传统的方案&#xff0c;方案不复杂&…

吾爱2023新年红包题第三题

吾爱论坛2023年春节红包安卓题&#xff0c;随便玩一玩&#xff1b; https://www.52pojie.cn/thread-1738015-1-1.html 第三题&#xff1a;https://www.52pojie.cn/home.php?modtask&doview&id22 首先我们下载后&#xff0c;打开apk是提示要点击 999次即可通关&…

Docker - 4. Docker 帮助启动类命令

目录 1. 启动 docker 2. 停止 docker 3. 重启 docker 4. 查看 docker 状态 5. 保持开机自动启动 6. 显示 docker 版本信息 7. 显示 docker 系统信息 8. 查看 docker 总体帮助文档 9. 查看 docker 命令帮助文档 1. 启动 docker systemctl start docker 2. 停止 dock…

macm1安装tensorflow以及pycharm配置

macm1安装tensorflow以及pycharm配置 本文目录macm1安装tensorflow以及pycharm配置使用MacOS 12安装conda创建一个conda环境安装tensorflowpycharm配置使用MacOS 12 必需条件&#xff1a;macOS 12 安装conda 安装Miniforge&#xff08;包含conda及一个python环境&#xff09;…

RabbitMQ消息队列实战(2)—— Java调用RabbitMQ的三种方式

本文主要介绍Java中调用RabbitMQ的三种方式。三种方式实际上对应了三种不同的抽象级别&#xff1a;首先&#xff0c;通过Java原生代码来访问RabbitMQ。在这种方式下&#xff0c;需要手动创建Connection&#xff0c;创建Channel&#xff0c;然后通过Channel对象可以显式的创建Ex…

基于springboot+vue的问卷调查系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 功能分析…

学校机房高效稳定,一招见效

校园安全作为公共安全领域重要的一部分&#xff0c;一直以来都格外受到重视。近年来&#xff0c;各地区陆续发布了多项加强校园安全管理的政策、法规及标准规范&#xff0c;旨在贯彻落实构建“平安校园”的宗旨&#xff0c;不断完善校园的人防、物防、技防建设。 学校机房常见四…

AutoLisp演练(二)

一、自动绘制出多个等半径圆相切 1.输入基准点baspt 2.输入小圆半径rad 3. 输入欲相切的圆的数量num 4.自动绘制出多个等半径圆相切 5. 涉及到相关变量&#xff0c;设定为baspt、rad、num、midpt、cenpt、kk、ang1、ang2 二、程序代码实现 三、测试及效果 测试一 四、…

盘点一些惊艳一时的 CSS 属性

✨ 个人主页&#xff1a;山山而川~xyj ⚶ 作者简介&#xff1a;前端领域新星创作者&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油&#xff01; &#x1f386; 系列专栏&#xff1a; web 大前端 &#x1f680; 学习格言&#xff1a;与其临…

2023爬虫学习笔记 -- 某狗网站爬取数据

一、爬取某狗网站的首页1、导入需要的库文件import requests2、指定我们要访问的网址网页"https://www.sogou.com"3、获取服务器的返回的所有信息响应requests.get(网页)4、通过text属性&#xff0c;从返回信息中读取字符串内容响应内容响应.text5、查看读取到的内容…

唐宇迪机器学习实战课程笔记(全)

1. 线性回归1.1线性回归理论1.2线性回归实战2.分类模型评估(Mnist实战SGD_Classifier)2.1 K折交叉验证K-fold cross validation2.2 混淆矩阵Confusion Matrix2.3 准确率accuracy、精度precision、召回率recall、F12.4 置信度confidence2.5 ROC曲线3.训练调参基本功(LinearRegre…

1612_PC汇编语言_条件以及控制结构

全部学习汇总&#xff1a; GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 这一次简单看看条件分支以及控制结构&#xff0c;感觉看完这部分之后&#xff0c;汇编的大部分框架已经有个差不多了。我的目的并不是成为汇编高手&#xff0c;因此…

数据处理——增删改

文章目录插入数据方式一&#xff1a;values方式2&#xff1a;将查询结果插入到表中更新数据删除数据MySQL8新特性&#xff1a;计算列综合案例插入数据 用INSERT插入数据 方式一&#xff1a;values 使用这种语法一次只能向表中插入一条数据。 情况1&#xff1a;为表的所有字段…

1月,不要跳槽

新年结束了&#xff0c;一些不满现状&#xff0c;被外界的“高薪”“好福利”吸引的人&#xff0c;一般就在这时候毅然决然地跳槽了。 在此展示一套学习笔记 / 面试手册&#xff0c;年后跳槽的朋友可以好好刷一刷&#xff0c;还是挺有必要的&#xff0c;它几乎涵盖了所有的软件…