2016-03-15 93 views
2

我正在重构我的应用程序以使用redux,这很好。如何在多个redux减速器中同时触发单个初始动作?

我想要做的一件事就是在开始时分派一个初始动作,每个reducer都会设法在那个时候初始化自己。

比方说,我有创造的店,路线等在该文件中的main.js,我可以这样做:

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

如果我这样做,动作类型app/init可以在每个减速拦截需要自行初始化。

一个例子用例(其中包括)

当应用程序启动时,第三方库一定要来看望如果用户当前被验证。如果是这样,则必须使用该用户数据触发LOGIN_SUCCESS操作。

我想看到这个代码与身份验证缩减器在同一个文件中,由全局init动作(这意味着商店被创建)触发。

问题

在减速(其中初始化动作管理),其他动作不能出动。

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

我可以用init()行动的创作者为每个减速器(我定义在同一个“鸭”相关的行动和减速器文件),但是这意味着进口/调用他们每个人在main.js,这正是我试图避免直接调度行动。

如何通过一个app/init动作派出并能够在每个存储中拦截它并发送其他操作来获得最好的世界?

注:我只是在每个reducer中实现这些初始化代码,内联,但我没有这样的标准访问调度器?

+0

您是否试图在开始阶段填充状态? –

+0

每个减速器中已经定义了初始状态。然后,根据该初始状态,需要发送其他操作。有点像一个初始thunk ...我想在所有需要它的减速器拦截的单个发送中分组。 – Pandaiolo

+0

'createStore'将'initialState'作为一个可选参数。如果你只是想设置整个应用程序的初始状态,这是值得检查。这比被激发的一组初始动作更可取。 –

回答

1

减速器根据动作计算下一个状态。在Redux中,它不适合放置像调用API那样的副作用。

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

相关问题