Redux异步API调用 - 最新状态

时间:2018-01-15 20:09:40

标签: angular redux dms

我目前正在为一家奥地利公司工作,我们正在为Windows开发一个文档管理系统。 2017年初,我们开始使用Angular创建Web应用程序。但是我们开始对应用程序的状态产生一些问题。

我们正在考虑将Redux用作状态管理器,但我们有一个问题。

假设我们有一张包含2个文件的表

|--------------------------------|
| Document1.pdf                  |
|--------------------------------|
| Document2.pdf                  |
|--------------------------------|

我们还预览了所选文件。

假设我们单击Doc 1(服务器需要5秒钟才能加载文档)。单击Doc1后1秒钟,我们单击Doc2(服务器只需1秒钟即可加载文档)。第二个稍后的Doc2出现在预览中,然而4秒后,后一个Doc1被加载并显示在预览中。虽然我们目前选择了Doc2。

使用Redux时,我们必须手动检查“正确”的文档,还是为我们做一切框架,我们只需实现服务器调用而不考虑应用程序的状态?

1 个答案:

答案 0 :(得分:3)

  

Redux是JavaScript应用程序的可预测状态容器。

Redux文档是如何开始的。 Redux不管理您的州。它只保留它并提供确定性的ish突变。它教授一些非常好的实践,它实际上是一个非常聪明的软件。但是,如果没有您的帮助,它无法解决您的问题。 Redux不是关于管理国家。它是关于管理导致管理您的州的流程。

我会通过使用用户最近点击的标记来解决您的问题。例如:

action                 | state
--------------------------------
clicking on Doc1       | state = { itemSelected: 'Doc1', data: null }
clicking on Doc2       | state = { itemSelected: 'Doc2', data: null }

然后,当响应到来时,我们需要一个

形式的有效载荷
{ itemToLoad: 'Doc1', data: {...} }

剩下的很简单,我们只检查itemToLoad是否等于itemSelected。如果是,那么我们更新数据。

if (payload.itemToLoad === currentState.itemSelected) {
  return {
    itemSelected: currentState.itemSelected,
    data: payload.data
  }
} else {
  // if not equal we just ignore it and return the current state
  return currentState;
}