微信小程序中实现状态管理

微信小程序中实现状态管理,第1张

状态管理中非常重要的点就是发布/订阅模式,发布/订阅模式的原理非常简单,一边发布,一边订阅。订阅者在事件中心注册具名事件和回调函数,发布者通知事件中心执行所有同名的回调函数

既然需要提供事件注册(订阅)的功能,那么必然需要一个地方来存放所有的事件,同一个事件名可以有多个回调,那么显然数据结构如下:

所以事件中心的雏型如下:

订阅功能:在具名事件的回调数组中推入了一个新的回调,接受一个事件名和回调函数。

发布功能:调用对应事件名的所有回调函数,参数为事件名和回调参数。

该对象主要用于存储共享数据,当数据被更新时触发 stageChange 事件。

dispatch:调用 actions ,可以执行一些异步的 *** 作,然后调用commit

commit:调用mutations

需求说明:在首页将一本书加入书架,书架列表自动更新。

store/state.js

store/mutation.js

store/action.js

store/index.js

订阅(书架页)

发布(首页)

1,只能bindtap点击事件或者发起支付回调后才能触发,bindsubmit发送表单不行,不过现在的订阅消息已经不需要formid,所以改起来挺容易的.

2,wx.requestSubscribeMessage里的success(res){} fail(res){} 并不是分别点击确定取消触发的回调,而是wx.requestSubscribeMessage调用成功和失败的回调,一般在fail里可以打印下错误msg,还有个complete(res){}是调用成功失败后都会触发的回调

3,只支持基础库2.8.2以上,所以如果你有事件是放在success或者complete回调里调用,需要向下兼容,判断用户的基础库版本,注意,这个错误不会走调用失败fail的回调 而是编译器直接报错no function

wx.getSystemInfo({

success: function (res) {

var version = res.SDKVersion

 version = version.replace(/\./g, "")

 console.log(version)

  if (parseInt(version) >= 282){

wx.requestSubscribeMessage({

success(res){

do something

}

})

}

else{

do something

}

4,点击下方"总保持以上选择,不再询问"后 貌似清了缓存也再也不出来提示框?貌似是这样 但是success fail complete回调里的事件还会触发.只是不再d出提示框.

先暂时这些


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7872374.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存