我们应该为每个动作类型创建一个史诗吗?在 redux-observable

Should we create one Epic per action type? in redux-observable

正在redux-observable学习中,有一些疑惑:

我们是否应该为要观看的每个动作创建一个史诗?

export const actionEpic = action $ => action$.ofType('ACTION')
export const action2Epic = action $ => action$.ofType('ACTION2')

或者我们可以为许多类似带开关的减速器创建它吗? 导入每一个 Epic 以在中间件中传达是很多工作

绝大部分 epics 将从匹配单个动作开始,例如action$.ofType(SOMETHING)。这是因为通常这些操作会触发特定于单个任务的一些副作用(如 AJAX 调用)。

想想像获取用户模型这样的事情。您通常只想监听 FETCH_USER 以启动此过程,但当然同一个史诗可能会监听其他操作以了解何时取消 in-flight 请求或类似请求。

如果您在单个史诗中混合副作用问题,例如创建同时处理获取用户和获取用户帖子的史诗,您将开始让您的 epics 更难维护和测试。

综上所述,没有规则。有合法的(但很少见的)史诗聆听多个动作以开始一些副作用的情况。例如如果一个史诗处理一些适用于多个域的通用任务,那么日志记录是最明显的,但还有其他的。

就像 reducer 一样,多个 epics 可以侦听同一个动作,但这只有在它们之间需要 little-to-no 协调时才有意义。