Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
构建redux、redux传奇和normalizer_Redux_Redux Saga_Normalizr - Fatal编程技术网

构建redux、redux传奇和normalizer

构建redux、redux传奇和normalizer,redux,redux-saga,normalizr,Redux,Redux Saga,Normalizr,所以我想使用这三种技术。我的想法是在normalizer的帮助下使用一个reducer来处理我的所有实体 redux saga将侦听请求的实体操作,运行请求实体的saga,并执行接收的实体操作,该操作将由调用normalizer的reducer处理,并将实体存储在实体切片中 对于删除实体,必须发生两件事:必须从状态中删除实体,并且必须发生将从服务器中删除实体的副作用(副作用:我知道有些人会声称从状态中删除也是副作用,但我认为redux saga在这个概念上不起作用) 所以我可以让一个ENTITY

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

redux saga将侦听请求的
实体
操作,运行请求实体的saga,并执行接收的
实体
操作,该操作将由调用normalizer的reducer处理,并将实体存储在
实体
切片中

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

所以我可以让一个
ENTITY\u REMOVED
操作将实体从状态中移除,还有一个saga监听该操作,它将处理api调用

现在让我们假设我有一个表,具有表的批量删除功能。该工作台由一个减速器“供电”,该减速器接受一个动作
数据\u选项集
。reducer会更新当前页面、过滤器等内容。此外,还会有一个故事,讲述如何侦听这些内容并调用API来返回新的数据集

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

如果我在要删除的实体上循环,并发送一个
ENTITY\u REMOVED
操作,我将无法知道这些删除何时完成,以便刷新表

如果我手动调用删除实体的saga,
ENTITY\u REMOVED
将永远不会被调度,因此实体不会从存储中删除


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

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

  • 等待实体id为参数的实体删除请求操作
  • 调用适当的端点以从服务器中删除实体
  • 若api调用成功,则调度实体_REMOVED操作将从状态中删除实体

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

    我将按如下方式处理您的问题:创建删除saga

  • 等待实体id为参数的实体删除请求操作
  • 调用适当的端点以从服务器中删除实体
  • 若api调用成功,则调度实体_REMOVED操作将从状态中删除实体

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

    我不喜欢实体删除请求的一点是,它的操作对应用程序的状态没有任何意义。它的唯一目的是产生副作用,这对我来说似乎很尴尬。就应用程序的状态而言,它代表了可能失败的一系列操作(或计算)。因为您只想在对服务器的网络请求成功时更新您的状态。如果未检查网络操作是否成功,则应用程序状态可能与服务器上的状态不同。我认为这样的组织导致了非常清晰的传说,但是如果你找到更好的解决方案,我很乐意了解我认为传说可以通过在出现问题时发出补偿措施来处理失败的情况。我不确定我是否正确理解你:你继续通过删除一个项目来更新redux状态,这将使您的一些组件重新上市。接下来,您进行一个api调用,若调用失败,您将启动额外的操作来添加刚刚从状态中删除的项?这似乎相当复杂,因为你将不得不存储临时项目,你正在删除,这将使你的组件闪烁,我认为这将是混淆的用户。看看redux传奇这一现实世界的例子。他们似乎正在对任何api调用执行请求操作,并发出成功/失败操作作为后续。流程如下所示:1)从redux状态删除实体2)触发导致api调用的副作用3)如果出现问题,我们将通知用户,并将实体重新置于该状态。UI是完全乐观的,服务器是完全透明的。我不喜欢ENTITY_REMOVE_请求的一点是,它的操作对于应用程序的状态来说没有任何意义。它的唯一目的是产生副作用,这对我来说似乎很尴尬。就应用程序的状态而言,它代表了可能失败的一系列操作(或计算)。因为您只想在对服务器的网络请求成功时更新您的状态。如果未检查网络操作是否成功,则应用程序状态可能与服务器上的状态不同。我认为这样的组织导致了非常清晰的传说,但是如果你找到更好的解决方案,我很乐意了解我认为传说可以通过在出现问题时发出补偿措施来处理失败的情况。我不确定我是否正确理解你:你继续通过删除一个项目来更新redux状态,这将使您的一些组件重新上市。接下来,您进行一个api调用,若调用失败,您将启动额外的操作来添加刚刚从状态中删除的项?这似乎相当复杂,因为你将不得不存储临时项目,你正在删除,这将使你的组件闪烁,我认为