miniapp icon indicating copy to clipboard operation
miniapp copied to clipboard

[Feature]小程序状态管理

Open cryzzchen opened this issue 4 years ago • 3 comments

目前 Rax 小程序使用了 @ice/store 作为状态管理方案,对于全局状态而言存在一些问题: 在小程序中,打开一个页面在处理上更接近 MPA 的新建页面,即需要渲染整个页面。@ice/store 依赖了 react-redux,并将 Provider 放在页面组件的父亲节点上。这样会导致 Provider 节点会被重新创建,如果用户在 src/app.ts 中声明了全局的初始状态,那么新打开的页面会被重新初始化一次,导致全局状态管理失效。 解决方案: 初步想法是将状态挂在到 App 或 Page 上,用小程序的全局和页面属性来保存状态。这套方案在对外接口上保持与 @ice/store 保持一致。

cryzzchen avatar Jul 06 '21 09:07 cryzzchen

我觉得这个和 Provider 没啥关系(或者说本质上不是因为这个),这东西要看你的 store 是放在某个页面的内存里还是放在小程序全局属性里的...

FuzzyFade avatar Jul 07 '21 07:07 FuzzyFade

@FuzzyFade 本质问题是我们目前渲染页面的机制使得无法使用 @ice/store 来管理全局状态。解决这个问题的两个方案:

  1. 改变渲染页面的方式,比如像 tarojs 那样在 App 层增加一个 wrapper,将全局状态的 Provider 放在 Wrapper 层中,这样在渲染 Page 时就可以保留 Provider
  2. 改写状态管理方案,将其状态保存到 App 中

具体方案我还在调研中,要看一下两个方案的成本和价值

cryzzchen avatar Jul 07 '21 09:07 cryzzchen

现在情况怎么样

xmsz avatar Nov 25 '21 11:11 xmsz