微信小程序--》小程序—全局数据共享和分包

这篇具有很好参考价值的文章主要介绍了微信小程序--》小程序—全局数据共享和分包。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🏍️作者简介:大家好,我是亦世凡华、渴望知识储备自己的一名在校大学生

🛵个人主页:亦世凡华、

🛺系列专栏:微信小程序

🚲座右铭:人生亦可燃烧,亦可腐败,我愿燃烧,耗尽所有光芒。

👀引言

       ⚓经过web前端开发的学习,相信大家对于前端开发有了一定深入的了解,今天我开设了微信小程序专栏,主要想从移动端开发方向进一步发展,而对于我来说写移动端博文的第一站就是小程序开发,希望看到我文章的朋友能对你有所帮助。

目录

🙈全局数据共享

安装 MobX 相关的包

创建Store实例

将 Store 中的成员绑定到页面中

在页面使用 Store 中的成员

将 Store 成员绑定到组件中

在组件中使用 Store 中的成员

🙉分包

分包的项目构成:

分包的加载规则:

分包的体积限制:

创建分包

打包原则

分包的引用原则

独立分包

独立分包的引用原则

分包预下载


🙈全局数据共享

全局数据共享(状态管理)是为了解决组件之间数据共享的问题,开发中常用的全局数据共享方案有:Vuex、Redux、MobX等。

在小程序中,可用 mobx-miniprogram (用来创建 Store 实例对象) 配合 mobx-miniprogram-bindings (用来把 Store 中的共享数据或方法,绑定到组件和页面中使用)实现全局数据共享。

安装 MobX 相关的包

在项目中运行如下命令,安装 MobX相关的包:(注意要启用管理员权限) 安装完成重新构建 npm

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

微信小程序独立分包的globaldata会相互影响吗,# 微信小程序/uni-app,微信小程序,小程序,开发语言,前端

微信小程序独立分包的globaldata会相互影响吗,# 微信小程序/uni-app,微信小程序,小程序,开发语言,前端

创建Store实例

// 创建store文件夹下的store.js文件,在这个 JS 文件中,专门来创建 Store 的实例对象
import {observable,action} from 'mobx-miniprogram'

export const store = observable({
  // 数据字段
  numA:1,
  numB:2,
  // 计算属性
  get sum(){
    return this.numA + this.numB
  },
  // actions 函数,专门来修改 store 中数据的值
  updateNum1:action(function(step){
    this.numA += step
  }),
  updateNum2:action(function(step){
    this.numB += step
  }),
})

微信小程序独立分包的globaldata会相互影响吗,# 微信小程序/uni-app,微信小程序,小程序,开发语言,前端

将 Store 中的成员绑定到页面中

// 路径需要相对路径,不然会报错
import {createStoreBindings} from '../../miniprogram/miniprogram_npm/mobx-miniprogram-bindings/index'
import {store} from '../../store/store'
Page({
  //生命周期函数--监听页面加载
  onLoad(options) {
    this.storeBindings = createStoreBindings(this,{
      store,
      fields:['numA','numB','sum'],
      actions:['updateNum1']
    })
  },
  //生命周期函数--监听页面卸载
  onUnload() {
    this.storeBindings.detroyStoreBindings()
  },
})

在页面使用 Store 中的成员

// .wxml文件
<view>{{numA}}+{{numB}}={{sum}}</view>
<van-button type="primary" bindtap="btnHander1" data-step="{{1}}">numA+1</van-button>
<van-button type="danger" bindtap="btnHander1" data-step="{{-1}}">numB-1</van-button>
// .js文件
// pages/message/message.js
import {createStoreBindings} from '../../miniprogram/miniprogram_npm/mobx-miniprogram-bindings/index'
import {store} from '../../store/store'

Page({
  //生命周期函数--监听页面加载
  onLoad(options) {
    this.storeBindings = createStoreBindings(this,{
      store,
      fields:['numA','numB','sum'],
      actions:['updateNum1']
    })
  },
  //绑定按钮点击事件
  btnHander1(e){
    // console.log(e);
    this.updateNum1(e.target.dataset.step)
  },
  //生命周期函数--监听页面卸载
  onUnload() {
    this.storeBindings.detroyStoreBindings()
  },
})

微信小程序独立分包的globaldata会相互影响吗,# 微信小程序/uni-app,微信小程序,小程序,开发语言,前端

将 Store 成员绑定到组件中

import {storeBindingsBehavior} from '../../miniprogram/miniprogram_npm/mobx-miniprogram-bindings/index'
import {store} from '../../store/store'

Page({
  behaviors:[storeBindingsBehavior],
  storeBindings:{
    // 数据源
    store, //指定要绑定的store
    fields:{//指定要绑定的字段数据
      numA:()=>store.numA,     //绑定字段的第一种方式
      numB:(store)=>store.numB,//绑定字段的第二种方式
      sum:'sum',               //绑定字段的第三种方式
    },
    actions:{ //指定要绑定的方法
      updateNum2:'updateNum2'
    }
  },
})

在组件中使用 Store 中的成员

//组件的 .wxml结构
<view>{{numA}}+{{numB}}={{sum}}</view>
<van-button type="primary" bindtap="btnHander2" data-step="{{1}}">numB+1</van-button>
<van-button type="danger" bindtap="btnHander2" data-step="{{-1}}">numB-1</van-button>

//组件的 .js结构
methods: {
  btnHander2(e){
    this.updateNum2(e.target.dataset.step)
  }
}

微信小程序独立分包的globaldata会相互影响吗,# 微信小程序/uni-app,微信小程序,小程序,开发语言,前端

🙉分包

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

分包的好处:可以优化小程序首次启动的下载时间;在多团队共同开发时可以更好的解耦协作

分包的项目构成:

分包前

小程序项目中的所有的页面资源都被打包到一起,导致整个项目的体积过大,影响小程序首次启动的下载时间

微信小程序独立分包的globaldata会相互影响吗,# 微信小程序/uni-app,微信小程序,小程序,开发语言,前端

分包后

分包后,小程序项目由 一个主包 + 多个分包组成:

主包:一般只包含项目的 启动页面TabBar 页面、以及所有分包都需要用到的一些公共资源。

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

微信小程序独立分包的globaldata会相互影响吗,# 微信小程序/uni-app,微信小程序,小程序,开发语言,前端

分包的加载规则:

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

tabBar页面需要放到主包中

当用户进入分包内某个页面时,客户端会把对应分包下载下来,下载完成后在进行展示:

非tabBar页面可以按照功能的不同,划分为不同的分包之后,进行按需下载

分包的体积限制:

目前,小程序分包的大小有以下两种限制:

整个小程序所有分包大小不超过16M(主包+所有分包)

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

创建分包

创建分包很简单,只需要在app.json文件下,通过 subpackages 进行分包创建,创建之后保存文件,分包的文件就会自动出现在目录中。

{
  "pages":[ //主包的所有界面
    "pages/home/home",
    "pages/message/message",
    "pages/contact/contact",
    "pages/index/index",
    "pages/logs/logs"
  ],
  "subpackages":[ //通过subpackages节点,声明分包的结构
    {
      "root": "package", //第一个分包的根目录
      "name": "p1"//给分包起个别名用来区分分包
      "pages": [//当前分包下,所有页面的相对存放路径
        "pages/demoA/demoA",
        "pages/demoB/demoB"
      ]
    },
    {
      "root": "package2", //第二个分包的根目录
      "name": "p2"//给分包起个别名用来区分分包
      "pages": [//当前分包下,所有页面的相对存放路径
        "pages/demoC/demoC",
        "pages/demoD/demoD"
      ]
    }
  ],
}

微信小程序独立分包的globaldata会相互影响吗,# 微信小程序/uni-app,微信小程序,小程序,开发语言,前端

当我们想1知道分包的体积是多少可以通过以下方式查看:

微信小程序独立分包的globaldata会相互影响吗,# 微信小程序/uni-app,微信小程序,小程序,开发语言,前端

打包原则

小程序会按 subpackages 的配置进行打包,subpackages之外的目录将被打包到主包中

主包也可以有自己的 pages(即最外层的 pages 字段)

tabBar 页面必须在主包内

分包之间不能相互嵌套

分包的引用原则

主包无法引用分包内的私有资源

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

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

独立分包

独立分包本质上也是分包,只不过它比较特殊,可以独立于主包和其它分包而单独运行

独立分包和普通分包区别

普通分包必须依赖于主包才能运行

独立分包可以在不下载主包的情况下,独立运行

开发者将某些具有一定功能独立性的页面配置到独立分包中的原因

当小程序从普通的分包页面启动时,需要首先下载主包

而独立分包不依赖主包即可运行,可以很大程度上提升分包页面的启动速度。

注意:一个小程序可以有多个独立的分包

那么我们如何将一个普通的分包改造成独立分包呢?很简单,只需要在分包中添加如下命令即可。

"subpackages":[ 
  {
    "root": "package", 
    "pages": [
      "pages/demoA/demoA",
      "pages/demoB/demoB"
    ],
    "independent": true //通过此节点,声明当前“package”分包为“独立分包”
  }
],

独立分包的引用原则

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

1、主包无法引用独立分包内的私有资源

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

3、独立分包和普通分包之间,不能相互引用私有资源

4、注意:独立分包中不能引用主包内的公共资源

分包预下载

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

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

{
  "preloadRule":{ //分包预下载规则
      "pages/contact/contact":{ //触发分包预下载的页面路径
        //network 表示在指定的网络模式下进行预下载
        //可选值为:all(不限网络)或wifi(仅 wifi 模式下进行预下载)
        //默认值为:wifi
        "network": "all"
        //packages 表示进入页面之后,预下载哪些分包
        //可以通过 root 或 name 指定预下载哪些分包
        "packages": ["package"],
       }
  }
}

微信小程序独立分包的globaldata会相互影响吗,# 微信小程序/uni-app,微信小程序,小程序,开发语言,前端

注意:同一个分包中的页面享有共同的预下载大小限额是2M。文章来源地址https://www.toymoban.com/news/detail-785709.html

到了这里,关于微信小程序--》小程序—全局数据共享和分包的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【小程序 - 加强】自定义组件、使用npm包、全局数据共享、分包_05

    目录 一、自定义组件 1. 组件的创建与引用 1.1 创建组件 1.2 引用组件 1.2.1 局部引用组件 1.2.2 全局引用组件 1.2.3 全局引用 VS 局部引用 1.2.4 组件和页面的区别 2. 样式 2.1 组件样式隔离 2.2 组件样式隔离的注意点 2.3 修改组件的样式隔离选项 2.4 styleIsolation 的可选值 3. 数据

    2024年02月07日
    浏览(30)
  • 【微信小程序】使用全局事件实现在不同页面之间共享数据或触发特定的操作

    在微信小程序中,你可以使用全局事件来实现在不同页面之间共享数据或触发特定的操作。以下是一个示例代码: 在app.js文件中,定义全局事件: 在上述代码中,我们在App对象中定义了globalData对象,用于存储全局数据。同时,我们定义了onLaunch方法,在小程序初始化时执行

    2024年02月16日
    浏览(33)
  • 微信小程序实现全局参数共享,且实现全局参数变化时的页面间通信

    首先,微信小程序中并没有提供直接的全局事件系统来监听全局参数的变化。因此,我们需要采用其他方式来达到这一目的。一种常见的方法是使用全局变量和事件监听来模拟全局事件系统。 1. 定义全局变量和事件 在 app.js 中定义全局变量,并提供一个方法来更新这些变量并

    2024年04月15日
    浏览(33)
  • 微信小程序详细讲解页面传值,globalData,wx,web前端开发基础

    在其他非app.js文件中修改: var app = getApp() ​ app.globalData.hasLogin = true 二、 使用 wx.navigateTo 与 wx.redirectTo 的时候,可以将部分数据放在 url 里面,并在新页面 onLoad 的时候初始化 // Navigate wx.navigateTo({ url: ‘…/pageD/pageD?name=raymondgender=male’, }) ​ // Redirect wx.redirectTo({ url: ‘…/p

    2024年04月25日
    浏览(43)
  • uniapp 全局数据(globalData)的设置,获取,更改

    globalData,这是一种简单的全局变量机制。这套机制在uni-app里也可以使用,并且全端通用   因为uniapp基本上都是将页面,或者页面中相同的部分,进行组件化,所以会存在父,子,(子,父)之间的传值的情况,但在某些情况下,可以选择将内容设置为一个全局的变量,并根

    2024年02月14日
    浏览(41)
  • 微信小程序(十四)分包和分包预加载

    注释很详细,直接上代码 上一篇 新增内容: 1.分包的配置 2.分包预加载的写法 先说说为什么需要分包: 小程序追求小而快,主包的大小控制是 小程序上线的硬性要求 ,分包有利于小程序 优化加载速度 分包的注意事项: 单个分包大小不能超过2mb 分包不意味着可以无限增加

    2024年01月25日
    浏览(40)
  • 微信小程序---分包操作

    有时候我们的小程序太大,首次打开小程序的时候回比较慢,这个时候我们可以试试分包操作。分包可以让用户在操作小程序的时候按需下载资源(用户在进入某些页面的时候才去下载相应的资源,可以加快小程序的速度,优化用户体验)。 小程序代码有个2M限制,是不是有

    2023年04月17日
    浏览(50)
  • 分包(微信小程序)

    首先,微信小程序中使用分包是为了减少首屏的请求,因为微信小程序会默认下载主包内的内容并展示到页面上,但是随着业务量的增加,代码量也会越来越大。会导致我们启动小程序的时候首页加载速度过慢的这个问题。这时我们就可以采用分包技术来解决首次加载速度慢

    2024年02月04日
    浏览(35)
  • 微信小程序如何分包

    微信小程序开发过程中,随着业务不断迭代,程序包的体积越来越大,使用分包加载是开发者必须面对的问题。 正常情况下,小程序首次启动时,会将整个代码包下载下来,所以如果代码包过大,会影响小程序首次启动时间,因此微信官方对小程序代码包做了大小限制。 一

    2023年04月24日
    浏览(28)
  • 微信小程序---如何创建分包

    1.在项目根目录中,创建分包的根目录,名为subpkg,这个名字可以自己定义 2.在 pages.json 中,和 pages 节点平级的位置声明 subPackages 节点,用来定义分包相关的结构: 3.在分包目录,点击右键新建页面,例如:

    2024年01月20日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包