构建redux,redux-saga和normalizr

时间:2016-09-15 11:59:01

标签: redux redux-saga normalizr

所以我想使用这三种技术。我的想法是在normalizr的帮助下,有一个处理我所有实体的reducer。

redux-saga将侦听ENTITIES_REQUESTED操作,运行请求实体的传奇,并进行ENTITIES_RECEIVED操作,该操作将由调用normalizr的reducer处理并将实体存储在entities切片。

对于删除实体,必须要做两件事:必须从状态中删除实体,并且必须发生副作用,这将从服务器中删除实体(侧点:我知道有些人会声称从状态中删除也是副作用,但我不认为redux-saga适用于这个概念。)

所以我可以有一个ENTITY_REMOVED动作,它会从状态中删除实体,还有一个saga监听它,它将处理api调用。

现在让我们说我有一张桌子,桌面有批量删除功能。该表是" powered"由接受动作DATA_OPTIONS_SET的reducer。 reducer更新当前页面,过滤器等内容。还会有一个saga来监听这个并调用API来返回新的数据集。

我希望有一个批量删除功能,在高级别删除所有实体,完成后,刷新表。

如果我遍历要删除的实体,并调度ENTITY_REMOVED动作,我将无法知道何时完成这些删除,以便我可以刷新该表。

如果我手动调用删除实体的传奇,则永远不会调度ENTITY_REMOVED,因此不会从商店中删除该实体。

这是否意味着我的架构不正确而且我在某个地方转了一圈?

1 个答案:

答案 0 :(得分:0)

我会按如下方式解决你的问题:创建删除传奇

  1. 等待ENTITIY_REMOVE_REQUEST操作,实体ID为参数
  2. 调用适当的端点以从服务器中删除实体
  3. 如果api调用是成功调度ENTITY_REMOVED操作,将从状态中删除实体。
  4. 当然这不是唯一的选择,很多细节将取决于你的api是如何构建的。您可以在第3点手动删除每个实体,而不是从服务器获取所有实体并使用新实体列表更新整个状态,或者您可以在单个API中批量传递并传递所有需要删除的实体。请致电第2点。