小程序奇技淫巧之globalDataBehavior管理全局状态
更新日期:
全局状态管理在小程序里也算是一道难题了,有些小伙伴会选择引入一些类 Store 的库来管理全局状态。今天来给大家分享一个,使用 Behavior 来管理全局状态的小技巧。
Behaviors
自定义组件中,提供了behaviors
的使用和定义。
从官方文档我们能看到:
behaviors
是用于组件间代码共享的特性,类似于一些编程语言中的“mixins”或“traits”。
每个behavior
可以包含一组属性、数据、生命周期函数和方法,组件引用它时,它的属性、数据和方法会被合并到组件中,生命周期函数也会在对应时机被调用。每个组件可以引用多个behavior
。
简单来说,我们能通过behaviors
来重构Component
的能力。Behavior的用处很多,前面也有介绍 computed 计算属性、watch 观察属性的实现,都是使用的 Behavior。
全局状态管理
我们希望全局共享一些数据状态,如果只是通过一个文件的方式进行维护,那么我们无法在状态更新的时候及时地同步到页面。我们需要额外调用 setData 才能更新页面中的 data 数据,才能告诉渲染层这块的数据渲染需要变更,而很多的 Store 状态管理库也是通过这样的方式实现的(事件通知 + setData + 全局状态)。
在小程序 Behavior 能力的支持下,我们可以通过一个全局的 globalData Behavior 注入到每个需要用到的 Component 中,这样就可以在需要的页面中直接引入该 Behavior,就能获取到了。不啰嗦,Behavior的实现如下:
|
|
显然,该 Behavior 主要提供了几个能力:
- 会在小程序 data 添加 globalData 的属性,在 WXML 文件中可以直接通过
获取到
- 提供
setGlobalData()
方法,用于更新全局状态 - 提供
setGlobalDataAndStorage()
方法,用于更新全局状态,同时写入缓存(会在下次启动应用的时候自动获取缓存数据)
这样,我们在初始化 Component 的时候直接引入就可以使用:
|
|
在引入了 globalDataBehavior 之后,我们的 WXML 就可以直接使用了:
|
|
页面如何使用 Behavior
Component
是Page
的超集,因此可以使用Component
构造器构造页面。
看看官方文档:事实上,小程序的页面也可以视为自定义组件。因而,页面也可以使用Component
构造器构造,拥有与普通组件一样的定义段与实例方法。但此时要求对应json
文件中包含usingComponents
定义段。
更详细的使用方法,在 computed 计算属性、watch 观察属性两篇文章中也有描述,大家可以自行参考。
或者直接查看最终的项目代码:wxapp-typescript-demo。
参考
结束语
Behavior 其实是很强大的一个能力,我们能用它来对自己的小程序做很多的能力拓展,缺啥补啥,还可以“混入”给每个 Component 每个方法打入日志,就不用每个组件自己手动打印代码拉。
查看Github有更多内容噢:https://github.com/godbasin
更欢迎来被删的前端游乐场边撸猫边学前端噢
码生艰难,写文不易,给我家猪囤点猫粮了喵~