我一直在处理TodoMVC example中的Redux,我注意到一些有趣的事情:应用程序将todo对象的CRUD移交给store,但仅通过传递处理过滤器状态组件之间的constants,即the footer和the list view。
这里的经验法则是什么?我很欣赏过滤器状态可能永远不会被保存到持久存储器中(除非可能作为用户配置文件的一部分),但它也感觉就像将过滤器状态保持在商店之外是与通量哲学不一致的。为什么不将更新过滤器状态委托给商店?
答案 0 :(得分:2)
我想说这个归结为用例+个人偏好。对于这个简单的应用程序,filter
在具有父子关系的两个组件之间共享,但在其他任何地方都没有。在这种情况下,这当然没问题。
使用这样的设置可以看到的好处是简化/小型商店。我目前正在使用Reflux
构建一个应用程序,我的一个商店已经膨胀了很多,以至于我在考虑如何分解它或者是否可以删除任何数据。 / p>
较小的商店(至少在Reflux
中)的附加好处是事件分派更少,这可能意味着更少的DOM渲染(或至少更少的虚拟DOM重新计算)。
(保持Reflux
的警告),"轻松"设置监听器到商店的方式适用于重新呈现以更改任何属性的组件,即使该组件只关心1或2.回到我的大商店问题,此时它包含大约10个属性。许多组件都连接到它,这10个属性中的1个是相当不稳定的。这会导致所有侦听器组件比必要时更频繁地通过虚拟DOM。因此,我还定义了许多shouldComponentUpdate
函数,否则我就不需要它们了。
当然,将filter
作为道具传递给Footer
的一个缺点是它如何影响DOM布局。即Footer
必须是MainSection
的孩子。这足以让我想把filter
放到商店里,尽管有开销。
IMO,最明显的缺点是filter
数据在应用程序的其他地方根本不可用。根据您的情况,这可能是正负,但我倾向于认为它通常是负。