首页 文章

构建redux,redux-saga和normalizr

提问于
浏览
1

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

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

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

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

现在假设我有一个表,具有表的批量删除功能 . 该表是"powered",由一个接受动作 DATA_OPTIONS_SET 的reducer . reducer更新当前页面,过滤器等内容 . 还会有一个来自侦听的saga并调用API来返回新的数据集 .

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

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

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

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

1 回答

  • 0

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

    • 等待实体ID作为参数的ENTITIY_REMOVE_REQUEST操作

    • 调用适当的 endpoints 以从服务器删除实体

    • 如果api调用成功调度ENTITY_REMOVED操作将从状态中删除实体 .

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

相关问题