3

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

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

我有两个单独的减速器来跟踪列表 1 和 2 中的选定项目。

假设用户选择了 Pizza 和 Anchovies,但决定他宁愿选择 Sub。他切换了他的选择,并发送了一个动作来更新 foodType 减速器。调味品还原剂是如何意识到这一点的?

我看到了两种可能的解决方案,但都有缺陷。

我可以在两个减速器中收听 FOOD_TYPE_CHANGED 操作,并且假设需要一些额外的计算,还可以在调味品减速器中计算新的食物类型,这样两者就不需要直接相互了解。当然这是多余的,但它还有另一个问题。假设有第三个列表取决于调味品的选择。我们现在是否还必须收听 FOOD_TYPE_CHANGED 并在这里计算 foodType 和 condiment?我们可以永远扩展这个概念,它会继续变得更加复杂。

我可以将它们组合成一个 reducer,并在更高级别处理两者之间的交互。但是假设我有一个复杂的应用程序,它不仅有两个,而且有十个相互依赖的状态。这种方法似乎会很快变得毛茸茸,并且在扩展时并不能真正简化任何事情。

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

4

1 回答 1

0

这是一个很常见的问题。请记住,reducer 只是函数——您可以随意组织它们。您可以将更多逻辑放入动作创建器中,并在动作中传递所需的“其他分支”数据;你可以组合减速器;您可以编写一个更“手动”的顶级减速器而不是使用combineReducers(),并将另一个分支作为附加参数传递给子减速器等。请参阅Redux 问题 #749 中的讨论:跨不同更新依赖状态的最佳实践状态树的分支?一些进一步的想法。

于 2016-01-14T17:38:32.367 回答