Flux:什么时候应该进入商店?

时间:2015-07-22 02:58:51

标签: reactjs reactjs-flux flux

我一直在处理TodoMVC example中的Redux,我注意到一些有趣的事情:应用程序将todo对象的CRUD移交给store,但仅通过传递处理过滤器状态组件之间的constants,即the footerthe list view

这里的经验法则是什么?我很欣赏过滤器状态可能永远不会被保存到持久存储器中(除非可能作为用户配置文件的一部分),但它也感觉就像将过滤器状态保持在商店之外是与通量哲学不一致的。为什么不将更新过滤器状态委托给商店?

1 个答案:

答案 0 :(得分:2)

我想说这个归结为用例+个人偏好。对于这个简单的应用程序,filter在具有父子关系的两个组件之间共享,但在其他任何地方都没有。在这种情况下,这当然没问题。

州的好处

较小的商店

使用这样的设置可以看到的好处是简化/小型商店。我目前正在使用Reflux构建一个应用程序,我的一个商店已经膨胀了很多,以至于我在考虑如何分解它或者是否可以删除任何数据。 / p>

尝试重新渲染组件的次数较少

较小的商店(至少在Reflux中)的附加好处是事件分派更少,这可能意味着更少的DOM渲染(或至少更少的虚拟DOM重新计算)。

(保持Reflux的警告),"轻松"设置监听器到商店的方式适用于重新呈现以更改任何属性的组件,即使该组件只关心1或2.回到我的大商店问题,此时它包含大约10个属性。许多组件都连接到它,这10个属性中的1个是相当不稳定的。这会导致所有侦听器组件比必要时更频繁地通过虚拟DOM。因此,我还定义了许多shouldComponentUpdate函数,否则我就不需要它们了。

商店的好处

影响DOM布局

当然,将filter作为道具传递给Footer的一个缺点是它如何影响DOM布局。即Footer必须是MainSection的孩子。这足以让我想把filter放到商店里,尽管有开销。

其他组件不可用的数据

IMO,最明显的缺点是filter数据在应用程序的其他地方根本不可用。根据您的情况,这可能是正负,但我倾向于认为它通常是负。