我目前正在为一家奥地利公司工作,我们正在为Windows开发一个文档管理系统。 2017年初,我们开始使用Angular创建Web应用程序。但是我们开始对应用程序的状态产生一些问题。
我们正在考虑将Redux用作状态管理器,但我们有一个问题。
假设我们有一张包含2个文件的表
|--------------------------------|
| Document1.pdf |
|--------------------------------|
| Document2.pdf |
|--------------------------------|
我们还预览了所选文件。
假设我们单击Doc 1(服务器需要5秒钟才能加载文档)。单击Doc1后1秒钟,我们单击Doc2(服务器只需1秒钟即可加载文档)。第二个稍后的Doc2出现在预览中,然而4秒后,后一个Doc1被加载并显示在预览中。虽然我们目前选择了Doc2。
使用Redux时,我们必须手动检查“正确”的文档,还是为我们做一切框架,我们只需实现服务器调用而不考虑应用程序的状态?
答案 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;
}