【发布时间】:2018-08-11 02:28:37
【问题描述】:
所以我正在通过构建以下沙箱来试验 ngrx 和 ngrx/效果:
https://stackblitz.com/edit/ngrx-vanilla
快速介绍:
- 它在 app/store 中有一个根存储区
- 它在 app/features 中有两个模块的延迟加载
- 它在 app/commons 中有单例服务
三页:
- 行动项目:路由到此页面会触发随机生成三个愚蠢的公司行动项目
- 用户:一个基本的 master > 详细的 redux 实现与路由器支持
- 会议:提出我的问题的地方,点击“开始会议”,见证相关的思想交流。
问题和背景:
- 我了解 redux 中的所有数据更新都是通过操作发生的
- “效果”库用于处理异步事件,以便根据第 3 方事件和异步调用调度新操作。
- app/common/meeting/service 模仿例如 websocket 或 firebase 实时数据库推送更新的行为。
收到更新后(在 app/store/effects/meeting.effects.ts 中说明),将调度一个新操作。
最后,问题是:让一个共同的服务了解商店是一种干净的做法吗?在哪里注册监听器到 websocket/firebase 实时数据库以便在数据被推送时调度操作的最佳位置?
在这里,我这样做是为了让效果(meeting.effects)对 meetingActions.START_MEETING 动作类型做出反应,并且每当推送数据时,向商店发送更新订单,但这感觉不对,因为我来的一系列原因最多:
- 很难单独进行单元测试(需要比自身更多的上下文)
- 在“停止会议”操作的情况下,此方法需要存储订阅(或?)以停止订阅。在我的方法中,无法控制在荒野中创建的 observable。
此类案件通常如何处理?
【问题讨论】:
标签: angular redux ngrx ngrx-store ngrx-effects