如何确保根据最新请求呈现了react-redux应用?

时间:2019-03-30 11:54:04

标签: reactjs redux async-await redux-thunk

我有一个react-redux应用程序:

  1. 在首次应用程序加载(初始化)时,根据“限制”查询参数(默认为20条记录)从数据库加载N条记录
  2. 每10秒应用程序从数据库请求相同(或更新)的记录以实时更新数据
  3. 如果用户更改了过滤器-应用程序会根据过滤器从数据库请求新记录,然后重新渲染应用程序(+更改间隔以根据过滤器加载数据)
  4. 如果用户向下滚动,则该应用会自动加载更多记录。

问题在于,如果for和instance的用户尝试过滤掉某些内容,并且在同一时间间隔正在加载更多数据,则2个请求可能发生冲突并相互覆盖。我可以确定在react-redux应用程序中的请求顺序如何。也许对于如何正确地将请求排队有一种通用的方法?

谢谢!

1 个答案:

答案 0 :(得分:0)

我不确定您所说的“冲突”是什么意思。我的理解是,将会发生以下情况:

  • 假设两个请求都成功,然后为每个请求检索数据,则redux状态将更新两次,呈现更新状态的组件将呈现两次(并且两次呈现之间的传递时间可能非常长。简短,这可能会让用户感到不愉快)

如果您只希望这两个请求之一刷新组件,则可能的解决方法如下:

  • 在从数据库检索数据之前,通过创建“ RETRIEVAL_START”操作来启动每个请求。 'RETRIEVAL_START'将设置Redux状态变量'retrievalInProgress'

  • 在这种情况下,如果只想从两个请求中的第一个请求中获取结果,则可以在从组件调用动作创建者之前检查“ retrievalInProgress”是否打开。如果是这样,请勿调用操作创建者(换句话说,在进行请求时不要请求数据)。成功检索或失败检索数据后,将清除“ retrievalInProgress”。

  • 如果只想从两个请求中的第二个获取结果,则将“ retrievalInProgress”设置为计数器,而不是布尔值。在减速器的“ retrievalSuccess”操作中,如果此计数器大于1,则意味着新请求已开始。在这种情况下,请不要更新状态,而要减少计数器。

我希望这是有道理的。在测试之前,我不能百分百确定这是否可行,我将不做:),但这是我要采用的方法。