- 需求的场景描述(希望解决的问题)
使用 globalData 跨页面共享数据时,每次都要在页面的 data 中从 globalData 复制一份,而且更新页面数据时也要修改 globalData ,造成页面逻辑和全局的逻辑耦合。
如果 globalData 中的数据能直接绑定到 wxml ,那么也就相当于有了一个简易的 mobx ,让跨页面状态管理更加便捷,会极大的提高开发体验,这样就让程序员们更快的开发出 bug 更少的小程序,让小程序的推广更加迅速,让微信赚到更多钱,让腾讯的股票上升,然后腾讯就会给小程序的开发团队发更多的钱。
- 希望提供的能力
wxml 能够绑定 globalData ,这样就能将 globalData 作为一个全局的状态 store 来使用了。
wxml 中用 $global 来表示绑定 globalData 。getApp().setGlobalData({ prop: value }) 来设置 globalData ,触发页面更新,下面是我设想的代码示例:
wxml
<!-- index.wxml --> < view > {{$global.name}} </ view > |
js
import * as api from '../../api.js' // 修改名称 export const updateUsername = name => api.updateUsername(name).then(({ statusCode }) => { getApp().setGlobalData({ name }) }) // 获取名称 export const getUsername = () => api.getUsername().then(({ data: { name } }) => { getApp().getGlobalData({ name })
|
当然,为了少打几个字,不一定要 $global ,选个简短一点的 $g 也可以;getApp().setGlobalData 也可以用 getApp().setData() ,但是大致的功能设想就是以上了。
这个你可以考虑通过全局store给页面注入数据来再在Page内setData来实现。
谢谢你的建议。
一个 Page 中可能会有很多个 data 属性,(假如有 8 个 data 属性)首先每个属性值在载入页面 setData 一次,然后在不同的方法中做了增删改都要 setData 一次,各种 setData 就会分布在 Page 的各个方法内,维护起来还是很麻烦的。如果模板能直接绑定 globalData ,那么我只需要在与后端交互的方法(自定义的 action.js)中调用一次 setGlobalData 就行了,Page 中就会比较干净,不会出现忘记 setData /忘记移除不用了的 setData /set 了错误的 Data 。
不过 @LastLeaf 说已经在讨论相关特性了,期待基础库能尽快实现。
我们已有相关特性的设计讨论。之后可以关注一下基础库或者 github/wechat-miniprogram 的更新。
谢谢,期待基础库能早日实现。
解决这个问题有个终极大招。。。就是。。。
我们已经用mbox了。。。
这么能折腾。。。
这个提议不错哦
谢谢支持😊