在包含reducers中调用封装的动作创建器

时间:2016-03-17 19:13:20

标签: encapsulation redux

我有一个封装组件,它有自己的reducer(s)和动作创建者(所有纯+同步)。在包含reducer中,我要求组件使其reducer处理封装状态。

通常,组件将其自己的操作传递给父级,并且父级调度新的操作,通过将组件操作发送到其自己的reducer以处理该位状态来处理该操作。

如果我想让外部(对组件)操作影响组件状态,是否合理地要求并在包含的reducer中调用组件的纯动作创建器,然后传递给组件& #39;减速机?这些操作不会被分派,只是创建并直接传递给适当的reducer。

编辑2016-03-21:

再看一遍,我认为这个问题太基于意见而没有一个有用的答案;至少在Redux文档自己发表意见之前。 ZekeDroid的回答显示了一个很好的推理理由,但我认为可以合理地认为在减速器中使用动作创建器将正确的动作传递给儿童减速器也是可以的。

1 个答案:

答案 0 :(得分:0)

这几乎是一个基于意见的答案,所以我会给你我的意见。调用其他不完全相关的组件的动作是完全合理的,因为具有redux连接状态意味着您希望该应用程序共享该状态。因此,我认为可以派遣任何影响州的行动。

例如,获取异步数据的组件可能会触发一个操作来禁用其组件外部的某个按钮。在这种情况下,您将调度另一个组件(按钮)的动作,这是非常合理的(并且很容易使用redux dev工具进行调试!)

编辑:

我试图建议如何让外部(对组件)操作影响组件状态"。要回答关于从reducer调用action creators的问题,我认为从抽象的角度来看,这将是一个反模式,因为你在状态转换逻辑中创建了一个循环:

view => action => reducer => store => view

如果您要调用reducer中的操作,虽然您还没有调度它,但您仍然在尝试使用仅应由reducers中的视图和其他操作创建者使用的逻辑。在这种情况下,用例会很有用,这样我们就可以提供替代解决方案,而不必破坏redux模式。