正确的方式来监听/对redux应用程序上的特定操作做出反应

时间:2017-10-15 21:50:59

标签: angular redux ngrx

我正在使用Angular和ngrx编写我的第一个redux应用程序。在几个场合,我发现自己对如何正确地连接"一系列行动。我举了一个例子。

我的应用程序有一个客户列表面板和一个客户详细信息面板,当用户选择特定客户时,我希望详细信息面板显示客户信息,但我也想隐藏客户列表面板。

目前,我正在调度CustomerSelected操作,该操作会触发效果(副作用),从服务器加载客户详细信息。加载详细信息后,我发送CusomerDetailLoaded操作,用客户信息更新商店。它还会触发一个效果,该效果会调度隐藏客户列表面板的HideCustomerList操作。

这是否可以接受或有更好的方法来实现这一目标?特别是我觉得CustomerDetailLoaded现在与布局细节紧密结合,我们加载客户细节的所有时间我们也隐藏了客户列表面板......对我来说听起来像是个错误。

谢谢, 加布

1 个答案:

答案 0 :(得分:1)

redux-observable库提供了很好的方式来监听特定的操作并在之后发送另一个操作。

例如,如果您想在ACTION_B之后发送ACTION_A,则可以执行以下操作:

const rootEpic = (action$) => action$.ofType('ACTION_A').mapTo({
  type: 'ACTION_B'
});

接下来,如果您想在ACTION_C之后发送ACTION_B,可以使用combineEpics帮助:

const epicA = (action$) => action$.ofType('ACTION_A').mapTo({
  type: 'ACTION_B'
});
const epicB = (action$) => action$.ofType('ACTION_B').mapTo({
  type: 'ACTION_C'
});
const rootEpic = combineEpics(
  epicA,
  epicB
)

请查看他们的documentation了解更多信息。