Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature]小程序状态管理 #174

Open
cryzzchen opened this issue Jul 6, 2021 · 3 comments
Open

[Feature]小程序状态管理 #174

cryzzchen opened this issue Jul 6, 2021 · 3 comments
Assignees

Comments

@cryzzchen
Copy link
Contributor

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

@cryzzchen cryzzchen self-assigned this Jul 6, 2021
@FuzzyFade
Copy link

FuzzyFade commented Jul 7, 2021

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

@cryzzchen
Copy link
Contributor Author

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

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

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

@xmsz
Copy link

xmsz commented Nov 25, 2021

现在情况怎么样

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants