请注意:我已经阅读了Redux(Baobab)的文档,我也做了相当一部分的Google&;测试.
Why is it so strongly suggested that a Redux app have only one store?个
我了解单店设置与多店设置(There are many Q&A on SO on this subject)的优缺点.
在我看来,这个架构决策属于基于项目需求的应用程序开发人员.那么,为什么对Redux如此强烈地建议,几乎到了听起来是强制性的(though nothing is stopping us from making multiple stores)?
EDIT: feedback after converting to single-store
在与ReDux合作的几个月后,许多人会认为这是一个复杂的SPA,我可以说单store 的 struct 是一个纯粹的乐趣.
以下几点可能会帮助其他人理解为什么单一store 与多家store 在许多用例中是一个没有意义的问题:
- it's reliable:我们使用 Select 器挖掘应用程序状态并获取上下文相关信息.我们知道所有需要的数据
- it's fast:我们store 目前有近it's fast个减速机,如果不是更多的话.即便如此,也只有少数还原程序处理数据
- debugging friendly:虽然这是使用redux作为一个整体的最有说服力的论点,但它也适用于单一store 与多个store store .在构建应用程序时,您必然会在 流程(programmer mistakes),这是正常的.皮塔是指当那些 调试错误需要数小时.多亏了单一的store (and redux-logger),我们从来没有在任何给定的东西上花费超过几分钟的时间 州政府的问题.
a few pointers个
建立reduxstore 的真正挑战是决定如何使用它.首先,因为改变 struct 只是一个巨大的痛苦.其次,因为它在很大程度上决定了你将如何使用和查询你的应用程序数据.关于如何组织store ,有很多建议.在我们的 case 中,我们发现以下是理想的:
{
apis: { // data from various services
api1: {},
api2: {},
...
},
components: {} // UI state data for each widget, component, you name it
session: {} // session-specific information
}
希望这个反馈能帮助其他人.
编辑2-有用的存储工具
对于那些一直想知道如何"轻松"管理single store的人来说,这可能很快就会变得复杂.有一些工具可以帮助隔离存储的 struct 依赖项/逻辑.
有Normalizr个基于模式对数据进行规范化.然后,它提供了一个接口来处理数据,并通过id
获取数据的其他部分,就像字典一样.
由于当时不知道normalizer,我按照同样的思路构建了一些东西.relational-json接受一个模式,并返回一个基于表的接口(a little like a database).关系型json的优点是,您的数据 struct 动态地引用数据的其他部分(essentially, you can traverse your data in any direction, just like normal JS objects).它不像normalizer那么成熟,但我已经成功地在生产中使用了几个月了.