iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >微信小程序全局状态是什么
  • 817
分享到

微信小程序全局状态是什么

2023-06-14 05:06:49 817人浏览 薄情痞子
摘要

这篇文章主要讲解了“微信小程序全局状态是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序全局状态是什么”吧!前言在微信小程序中,可以利用 App.js 的 globalData

这篇文章主要讲解了“微信小程序全局状态是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序全局状态是什么”吧!

前言

在微信小程序中,可以利用 App.js 的 globalData 作为中间桥梁,在 Page, Component 之间,包括页面与页面,页面与组件,组件与组件之间传递需要传递的信息。但是,我们不能及时的知道 globalData 下的变化,在新建小程序的官方的默认事例中,获取 UserInfo 这一网络操作有延迟的,为此写了很多不必要的代码。就连官方案例都存在这一情况,相信在开发中你也会遇到类似的情况。在本文中将介绍如何解决这一类问题。

需求分析

相信以下情况是我们在没有全局状态管理下常有的操作:

  • 在 Page,Component 的 OnLoad,Attached 两个生命周期钩子函数中,进行一些从 App 的 globalData 赋值一些已经存在的属性到页面或组件中的 data 中。

  • 在最开始就存在一些异步的网络请求,获取的数据用于全局,刚开始可能这个 globalData 还没有相关属性,直到请求成功,才把相关属性添加到 globalData,而这时 Page 的从 globalData 的赋值操作可能已经完成了,只不过是 undefined,为此需要进一步的判断再进行赋值到 Page,Component 中。如果只是一两个这个还说很简单的,但是多个页面,或者多个变量都需要赋值的话,我想你会拒绝并寻找偷懒的办法。

  • 一些在页面和组件从 globalData 赋值的变量不仅是用于判断、展示,我们可能还需要依据用户交互而改变变量的值,那么在其他页面,其他组件中同样的变量也需要统一改变。

以上情况我们可提出以下几点需求:

  1. 在页面,组件初始加载时,尽早的从 globalData 获取并赋值到页面,组件所需要的一些属性

  2. 及时的获取一些 globalData 某一属性的变化,并进行一些后续相关操作

  3. 在改变 Page,Component 的值的同时,其他页面,组件也进行一样的改变

下面是需求的原始代码

// app.jsApp({ globalData: {  userInfo: null }, onLaunch(){  wx.getSetting({   success: res => {    if(res.authSetting['scope.userInfo']){     wx.getUserInfo({      success: res => {       this.globalData.userInfo = res.userInfo       // 需求2       if (this.userInfoReadyCallback) {        // 存在此回调函数,意味着 page 执行了 onLoad        // 且没有获取到 userInfo 并赋值到 page 的 data 中        // 执行此回调函数,赋值到相应的页面中        this.userInfoReadyCallback(res)       }      }     })    }   }  }) }})
// Pages/index/index.jsconst app = getApp()Page({ // ... onLoad(options){  // 需求1  const userInfo = app.globalData.userInfo  userInfo && this.setData({useInfo})  // 需求2  // 如果没有获取到 app.globalData.userInfo  // 意味还未执行 wx.getUserInfo 的回调函数  // 给 app 添加响应的一个回调函数,绑定此时的 this 到回调函数  userInfo || app.userInfoReadyCallback = res => {   this.setData({    userInfo: res.userInfo   })   delete app.userInfoReadyCallback  } }})

微信小程序全局状态是什么

这是官方小程序案例的代码,我只做了一点修改,这里只是展示了需求 2 ,globalData 属性从无到有时执行页面设置的回调函数,并没有实现每一次都会执行回调函数,需求 3 的代码比较复杂,不在此展示。

我们可以思考,以上几点需求需要实现的,一定要有的代码有哪些。可以发现,需求 1 和需求 3 主要就是页面,组件初始化,和 globalData 属性被改变时都需要使用 this.setData 方法,只不过每次 this 的指向的实例不同。而需求 2 则是应该存在一个回调函数,且回调函数的 this 也应该指向相应的实例,在 globalData 属性被改变时执行这些回调函数。
从时间点来看,我们有两个,一个是页面,组件初始化,一个是 globalData 属性改变时,那么第一个时间点,我们可以考虑到小程序的生命周期的钩子函数,onLoad 和 attached,在这两个时间点执行 this.setData 的操作。而 globalData 属性的改变都是我们主动或者用户事件而产生的,就是可以看作这一操作是一个对 globalData 某个属性的事件,而这个事件发生后再去执行一些写好的回调函数。

从操作对象来看,基本都是页面和组件的实例 this,以及 app.globalData。

需求理论性总结

综上,我们可以在初始化时,进行自动的 this.setData(不用自己手动),和保存 this(用于事件执行时指向相应的实例),存储相应的回调函数为事件(事件就是未执行的函数),在需要时主动触发这个事件即可。那么可以看到,整个流程下来,我们需要一个横跨 app,page,component 之间的一个变量,用于劫持初始化的钩子函数,进行自动化赋值,存储相应的事件,暴露一个事件触发的接口。

纸上得来终觉浅,绝知此事要躬行

看到这里,相信你已经有一定的了解全局状态管理,那么到底如何实现呢?在这里,我要强调,如果你阅读此文后对此有一定的了解了,我说的思路,那么你一定要自己尝试实现出代码,不管是否好坏,总是比没有实现的好,在自己实现中也许有更多的收获。下面以上上面案例展示一下简单的实现代码,给没看太明白的一个思路。在下次我会写一遍相关代码实现的讲解,应该会有。

// app.jsclass Store { constructor(app){ this['event'] = {} this.app = app } autoSet(globalData, instance){ const instanceData = {} for (let prop of globalData){  instanceData[prop] = this.app.globalData[prop]  const callBack = (newValue) => {  instance.setData({[prop]: newValue})  instance.watch[prop] && instance.watch[prop].call(instance, newValue)  }  this.addEvent(prop, callBack)  instance.setData(instanceData)  callBack(instanceData[prop])  delete instance.watch  delete instance.globalData } } addEvent(eventName, callBack){ this.event[eventName] = this.event[eventName] || [] this.event[eventName].push(callBack) } dispatch(eventName, newValue){ this.app.globalData[eventName] = newValue this.event[eventName] && this.event[eventName].forEach(item => item(newValue)) }}App({ globalData: {  userInfo: null }, onLaunch(){  // new 一个实例并保存到小程序 app 中,用于全局调用  this.store = new Store(this)  wx.getSetting({   success: res => {    if(res.authSetting['scope.userInfo']){     wx.getUserInfo({      success: res => {       // 获取到 userInfo 后,触发事件       this.store.dispatch('userInfo', res.userInfo)      }     })    }   }  }) }})
// Pages/index/index.jsconst app = getApp()Page({ // ... data: {  userName: null }, // globalData 数组用于自动赋值 globalData: ['userInfo'], // 监听相应的 globalData 属性,设置回调函数 watch: {  userInfo(userInfo){  console.log('userInfo 更新啦', this)  this.setData({userName: userInfo.nickName})  } }, onLoad(options){  // 传入此 globalData,和实例,设置该实例需要的 data,创建事件  app.store.autoSet(this.globalData, this)  // 其他你想做的... }})

上面的代码并没有劫持钩子函数,只是额外在函数开始时执行了绑定函数,而且也没有页面销毁时,释放内存的操作。还是有许多可优化的地方,这些都留到下一次讲解。

总结

感谢各位的阅读,以上就是“微信小程序全局状态是什么”的内容了,经过本文的学习后,相信大家对微信小程序全局状态是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 微信小程序全局状态是什么

本文链接: https://www.lsjlt.com/news/267953.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 微信小程序全局状态是什么
    这篇文章主要讲解了“微信小程序全局状态是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序全局状态是什么”吧!前言在微信小程序中,可以利用 App.js 的 globalData ...
    99+
    2023-06-14
  • 微信小程序全局状态的深入讲解
    前言 在微信小程序中,可以利用 App.js 的 globalData 作为中间桥梁,在 Page, Component 之间,包括页面与页面,页面与组件,组件与组件之间传递需要传...
    99+
    2024-04-02
  • 微信小程序的全局状态管理 — mobx-miniprogram
    一、简介 在小程序中,常常有些数据需要在几个页面或组件中共享。使用 MobX 来管理小程序的跨页面数据,  其实类似于vuex的store。 小程序的 MobX 绑定辅助库。 此 behavior 依赖开发者工具的 npm 构建。具体...
    99+
    2023-10-11
    微信小程序 前端 小程序
  • 【微信小程序】全局配置
    目录 全局配置文件及常用的配置项 全局配置 - window 1. 小程序窗口的组成部分 2. 了解 window 节点常用的配置项  3. 设置导航栏的标题 4. 设置导航栏的背景色  5. 设置导航栏的标题颜色 6. 全局开启下拉刷新功...
    99+
    2023-09-10
    微信小程序 小程序 前端 javascript 开发语言
  • 微信小程序自定义状态栏
    本文实例为大家分享了微信小程序自定义状态栏的具体代码,供大家参考,具体内容如下 首先我们需要在json文件中修改一下配置。如果我们只需要在一个页面使用自定义状态栏,我们可以在这个页面...
    99+
    2024-04-02
  • 【微信小程序】全局配置 - tabBar
    目录 全局配置 - tabBar 1. 什么是 tabBar 2. tabBar 的 6 个组成部分 3. tabBar 节点的配置项 4. 每个 tab 项的配置选项 全局配置 - 案例:配置 tabBar 1. 需求描述 2. 实现步骤...
    99+
    2023-09-03
    微信小程序 开发语言 小程序 javascript
  • 微信小程序动态页面是什么
    微信小程序动态网页是指一种网页编程技术,动态页面的代码虽然没有变,但可随着时间、环境或者数据库操作等不同的结果而改变显示的内容,例如网站上的广告轮播图,代码不变,图片会自动变化。...
    99+
    2024-04-02
  • 微信小程序怎么实现状态管理
    微信小程序可以使用第三方库或自己实现状态管理来管理应用的状态。以下是一些常见的方法: 使用第三方库:比如使用微信官方推荐的微信小程...
    99+
    2024-04-09
    微信小程序
  • 微信小程序怎么使用全局js
    今天小编给大家分享一下微信小程序怎么使用全局js的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。要注意的是必须要用module...
    99+
    2023-06-26
  • 微信小程序监控点状态有哪些
    本篇内容介绍了“微信小程序监控点状态有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!将监控点包装成一个类以后,接下来应该就是设计和实现监...
    99+
    2023-06-19
  • 微信小程序做全局登录弹窗
    需求:在任意需要弹出登录的页面,后台返回需要登录状态码,弹出登录弹窗进行登录,并刷新当前页面 过程:因为微信小程序无法封装一个全局组件通过方法全局调用。因此只能封装一个公共组件,在需要弹窗的页面注册并...
    99+
    2023-10-01
    微信小程序 小程序 微信 前端
  • 微信小程序开发 app.json全局配置
    JSON 是一种数据格式,在实际开发中,JSON 总是以配置文件的形式出现。 app.json 是当前小程序的全局配置,可以通过app.json对小程序项目进行设置所有页面路径、窗口外观、界面表现、底部 tab 等。 { "pages...
    99+
    2023-10-08
    微信小程序 前端 小程序 javascript json Powered by 金山文档
  • 微信小程序--》小程序—全局数据共享和分包
    🏍️作者简介:大家好,我是亦世凡华、渴望知识储备自己的一名在校大学生 🛵个人主页:亦世凡华、 🛺系列专栏:微信小程序 🚲座右铭:人生亦可燃烧,亦可腐败,我愿燃烧,耗尽...
    99+
    2023-09-13
    微信小程序 小程序 开发语言 前端
  • 微信小程序直播异常状态怎么获取
    本篇内容主要讲解“微信小程序直播异常状态怎么获取”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“微信小程序直播异常状态怎么获取”吧!接口说明:首次获取立马返回直播状态,往后间隔1分钟或更慢的频率去...
    99+
    2023-06-26
  • 微信小程序如何监听全局变量
    最近工作上遇到一个问题,有个全局变量 red_heart,因为它在很多地方用到,当它发生改变了,用到的地方也要改变。但是原生小程序并没有像Vue这种相关的做法。所以我就想自己实现一个...
    99+
    2024-04-02
  • 微信小程序怎样监听全局变量
    这篇文章主要讲解了“微信小程序怎样监听全局变量”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序怎样监听全局变量”吧!开始吧首先全局变量里肯定要先有这个 red_heartglobal...
    99+
    2023-06-14
  • 微信小程序是什么意思
    小编给大家分享一下微信小程序是什么意思,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!微信小程序是小程序的一种,英文名是Wechat Mini Program,是一...
    99+
    2023-06-22
  • 微信小程序中WXSS是什么
    这篇文章主要介绍微信小程序中WXSS是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!WXSSWXSS(WeiXin Style Sheets)是一套样式语言,用于描述WXML的组件样式。WXSS用来决定WXML的...
    99+
    2023-06-26
  • 微信小程序如何获取音乐播放状态
    这篇文章主要介绍“微信小程序如何获取音乐播放状态”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序如何获取音乐播放状态”文章能帮助大家解决问题。wx.getBackgroundAudioPla...
    99+
    2023-06-26
  • 微信小程序全局文件的使用详解
    目录全局文件总结我们前边两篇介绍了账号的申请、注册,工具的安装,云服务的开通。本篇我们介绍一下基础语法。介绍的方法呢我们会结合上微搭低代码的工具一起做个对比。因为低代码工具也产生了非...
    99+
    2022-11-13
    微信小程序全局文件 小程序全局文件
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作