miniapp
miniapp copied to clipboard
[Feature]小程序状态管理
目前 Rax 小程序使用了 @ice/store 作为状态管理方案,对于全局状态而言存在一些问题: 在小程序中,打开一个页面在处理上更接近 MPA 的新建页面,即需要渲染整个页面。@ice/store 依赖了 react-redux,并将 Provider 放在页面组件的父亲节点上。这样会导致 Provider 节点会被重新创建,如果用户在 src/app.ts 中声明了全局的初始状态,那么新打开的页面会被重新初始化一次,导致全局状态管理失效。 解决方案: 初步想法是将状态挂在到 App 或 Page 上,用小程序的全局和页面属性来保存状态。这套方案在对外接口上保持与 @ice/store 保持一致。
我觉得这个和 Provider 没啥关系(或者说本质上不是因为这个),这东西要看你的 store 是放在某个页面的内存里还是放在小程序全局属性里的...
@FuzzyFade 本质问题是我们目前渲染页面的机制使得无法使用 @ice/store 来管理全局状态。解决这个问题的两个方案:
- 改变渲染页面的方式,比如像 tarojs 那样在 App 层增加一个 wrapper,将全局状态的 Provider 放在 Wrapper 层中,这样在渲染 Page 时就可以保留 Provider
- 改写状态管理方案,将其状态保存到 App 中
具体方案我还在调研中,要看一下两个方案的成本和价值
现在情况怎么样