如何在多个redux减速器中同时触发一个初始动作?

时间:2016-03-15 10:51:57

标签: redux

我正在重构我的应用以使用redux,这很棒。

我想做的一件事就是在开始时发出初步行动,每个减速机都会设法在那一刻初始化。

假设我有一个main.js来创建商店,路线等。在那个文件中,我可以这样做:

store.dispatch({ type: 'app/init' });

如果我这样做,可以在每个需要初始化自己的reducer中拦截操作类型app/init

示例用例(以及其他)

启动应用程序时,必须调用第三方库以查看用户当前是否已通过身份验证。如果是,则必须使用该用户数据触发LOGIN_SUCCESS操作。

我希望在与全局初始化操作触发的同一文件中看到此代码(这意味着创建了商店)。

问题

在reducer(管理init操作)中,无法调度其他操作。

实施操作的建议方法是定义动作创建者,这确实非常干净,让我们使用像thunks这样的中间件来发送其他动作。

我可以为每个reducer使用init()个动作创建器(我在相同的" ducks"文件中定义相关的动作和reducer),但这意味着在{{1}中导入/调用它们中的每一个这是我试图通过直接调度动作来避免的。

如何通过调度一个main.js行动,并在每个商店中拦截它并发送其他行动来充分利用所有世界?

注意:我想在每个reducer中实现这些初始化代码,内联,但是我没有这种方式对调度程序的标准访问权限?

1 个答案:

答案 0 :(得分:1)

reducer只根据动作计算下一个状态。在Redux中,它不适合放置调用API等副作用。

如果您想编排异步动作工作流程,建议您查看Redux Saga。它允许您定义长时间运行的功能(“sagas”),可以“等待”特定操作,执行一些副作用,并分派更多操作。