如何使用Redux中的级联更新来建模相互依赖的数据?

时间:2016-01-14 06:24:40

标签: javascript architecture redux redux-framework

例如,假设我在页面上有两个单独的项目列表。也许我们要从披萨店和子店订购。

  • 清单1 - 食物类型 - Pizza,Sub
  • 清单2 - 调味品 - 生菜(仅限子菜),洋葱(两者),凤尾鱼(仅限比萨饼)

我有两个单独的缩减器,用于跟踪列表1和列表2中的选定项目。

假设用户选择了Pizza和Anchovies,但决定他更喜欢Sub。他切换了他的选择并调度了一个动作以更新foodType减速器。调味品减速机如何意识到这一点?

我看到两种可能的解决方案,但两者都存在缺陷。

我可以在两个Reducer中听取FOOD_TYPE_CHANGED动作,并且假设还需要一些额外的计算,还可以在调味品减速器中计算新的食物类型,这样两个人就不需要直接察觉了彼此的。当然这是多余的,但它也存在另一个问题。让我们说第三个列表取决于调味品的选择。我们现在还必须听FOOD_TYPE_CHANGED并在这里计算foodType和调味品吗?我们可以永久地扩展这个概念,并且它会继续变得更加复杂。

我可以将它们组合成一个减速器,并在更高的层次上处理两者之间的相互作用。但是说我有一个复杂的应用程序不仅有两个,而是十个相互依赖的状态。这种方法似乎很快就会变得毛茸茸,并且在缩放时并不能简化任何事情。

有没有更好的方法来处理这种情况?

1 个答案:

答案 0 :(得分:0)

这是一个非常常见的问题。请记住,减速器只是功能 - 您可以根据需要随意组织它们。您可以将更多逻辑放入动作创建器中,并在动作中传递所需的“其他分支”数据;你可以结合减速器;您可以编写一个更“手动”的顶级缩减器,而不是使用combineReducers(),并将另一个分支作为附加参数传递给子缩减器等。请参阅https://github.com/rackt/redux/issues/749处的讨论进一步了解想法。