alibaba / fish-redux

An assembled flutter application framework.
https://github.com/alibaba/fish-redux
Apache License 2.0
7.33k stars 843 forks source link

pageB想要操作pageA的某个state,最好的办法是把它做成globalstate吗? #511

Open CoolBerry opened 4 years ago

CoolBerry commented 4 years ago

如果只能做成globalState的话,那么当页面变多之后,为了页面之间共享数据的需求,global state数据会越来越多。

CoolBerry commented 4 years ago

上述问题的引申问题: Page应该如何更好的监听global state的变化,来做相应的事情。 已知是page可以通过connectExtraStore来bind globalstate成为页面的state,那如何自动的处理,这部分state变化之后page还要处理的事情呢。 例如:userInfo(用户登录态)是global state,pageA connect了这部分state。那么想要实现pageA检测到userInfo发生变化之后,要重新刷新页面这个需求要怎么合理实现呢。

CoolBerry commented 4 years ago

如果通过globalStore.subscribe((){//这里加判断})这样的方式确实是可以,但总感觉哪里怪怪的,因为page已经connect store的数据到page里了,但是还要subscribe store,就有点奇怪。

或许有更好的办法来实现。

zjuwjf commented 4 years ago

pageA connect globalStore, 如果globalStore中的状态(pageA关心)发生变化,会自动触发 pageAStore状态的变化,也就能自动刷新。

ludy520 commented 4 years ago

@zjuwjf globalStore的状态更新后,自动触发pageStore的状态变化,那怎么触发pageStore的initState??

zjuwjf commented 4 years ago

@zjuwjf globalStore的状态更新后,自动触发pageStore的状态变化,那怎么触发pageStore的initState??

不会触发initState。 initState 只会在创建store的初始化中执行一次。

ludy520 commented 4 years ago

@zjuwjf 因为一些api是在page的initState的时候去调用的,那如果是更新了globalState的用户,需要重新调用这些initState的api,该去怎么去触发好了??

zjuwjf commented 4 years ago

可以放在 AppStore 和 PageStore 的connector 里

ludy520 commented 4 years ago

@zjuwjf 还是不太明白啊,请教可以给个demo吗?

zjuwjf commented 4 years ago

@zjuwjf 还是不太明白啊,请教可以给个demo吗?

你可以给一下你的initState代码和AppStore 与 PageStore 的connector代码

CoolBerry commented 4 years ago

pageA connect globalStore, 如果globalStore中的状态(pageA关心)发生变化,会自动触发 pageAStore状态的变化,也就能自动刷新。

@zjuwjf 对的是这样子的,假设就叫做stateA,global中的stateA刷新之后pageA里面就自动刷新了。但是因为是自动刷新,所以pageA的需求是,监测到stateA变化的话需要call一次后端,类似这种需求的话,应该写在什么地方会比较合适呢?

  1. 写在pageA的initState里面去subscribe global,去判断。
  2. 写在coonect里面?

或者是否有更合适的方案?

yaotj commented 4 years ago

可以写多个GlobalState吗? 比如PageA、PageB对应StateA,PageC、PageD对应StateC,分别connector

li305263 commented 4 years ago

同问..不同page之间数据共享 除了globalStore还有别的办法吗

aimin987 commented 4 years ago

这个问题怎么优雅的解决,我也遇到了。 求助!!!!