我正在重构我的应用以使用redux
,这很棒。
我想做的一件事就是在开始时发出初步行动,每个减速机都会设法在那一刻初始化。
假设我有一个main.js
来创建商店,路线等。在那个文件中,我可以这样做:
store.dispatch({ type: 'app/init' });
如果我这样做,可以在每个需要初始化自己的reducer中拦截操作类型app/init
。
示例用例(以及其他)
启动应用程序时,必须调用第三方库以查看用户当前是否已通过身份验证。如果是,则必须使用该用户数据触发LOGIN_SUCCESS
操作。
我希望在与全局初始化操作触发的同一文件中看到此代码(这意味着创建了商店)。
问题
在reducer(管理init操作)中,无法调度其他操作。
实施操作的建议方法是定义动作创建者,这确实非常干净,让我们使用像thunks
这样的中间件来发送其他动作。
我可以为每个reducer使用init()
个动作创建器(我在相同的" ducks"文件中定义相关的动作和reducer),但这意味着在{{1}中导入/调用它们中的每一个这是我试图通过直接调度动作来避免的。
如何通过调度一个main.js
行动,并在每个商店中拦截它并发送其他行动来充分利用所有世界?
注意:我想在每个reducer中实现这些初始化代码,内联,但是我没有这种方式对调度程序的标准访问权限?
答案 0 :(得分:1)
reducer只根据动作计算下一个状态。在Redux中,它不适合放置调用API等副作用。
如果您想编排异步动作工作流程,建议您查看Redux Saga。它允许您定义长时间运行的功能(“sagas”),可以“等待”特定操作,执行一些副作用,并分派更多操作。