1

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

redux-saga 将监听ENTITIES_REQUESTED动作,运行一个请求实体的 saga,并执行一个ENTITIES_RECEIVED动作,该动作将由调用 normalizr 并将实体存储在entities切片中的 reducer 处理。

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

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

现在假设我有一个表,该表具有批量删除功能。该表由接受 action 的减速器“供电” DATA_OPTIONS_SET。reducer 会更新当前页面、过滤器等内容。还会有一个 saga 来自监听此内容并调用 API 以返回新数据集。

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

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

如果我手动调用删除实体的 saga,ENTITY_REMOVED将永远不会被调度,因此实体不会从商店中删除。

这是否意味着我的架构不正确并且我在某个地方转错了方向?

4

1 回答 1

0

我会按如下方式处理您的问题:创建删除传奇

  1. 等待以实体 id 作为参数的 ENTITIY_REMOVE_REQUEST 操作
  2. 调用适当的端点以从服务器中删除实体
  3. 如果 api 调用成功,则调度 ENTITY_REMOVED 操作,该操作将从状态中删除实体。

当然这不是唯一的选择,很多细节将取决于你的 api 是如何构建的。而不是在第 3 点手动删除每个实体。您可以调度一个操作,该操作将从服务器获取所有实体并使用新实体列表更新您的整个状态,或者您可以批量化并传递所有需要在单个 api 中删除的实体调用第 2 点。

于 2016-09-16T09:55:54.300 回答