Redux 异步 API 调用 - 最新状态
Redux async API calls - most up to date state
我目前在一家奥地利公司工作,我们正在为Windows开发一个文档管理系统。 2017 年初,我们开始使用 Angular 创建 Web 应用程序。但是,我们开始遇到应用程序状态的一些问题。
我们正在考虑使用 Redux 作为状态管理器,但我们有一个顾虑。
假设我们有一个 table 和 2 个文档
|--------------------------------|
| Document1.pdf |
|--------------------------------|
| Document2.pdf |
|--------------------------------|
我们还有所选文档的预览。
假设我们单击 Doc 1(服务器加载文档需要 5 秒)。单击 Doc1 1 秒后,我们单击 Doc2(服务器加载文档仅需 1 秒)。一秒钟后 Doc2 出现在预览中,但是 4 秒后 Doc1 被加载并显示在预览中。虽然我们目前选择了 Doc2。
当使用 Redux 时,我们是否必须手动检查 "correct" 文档,或者框架为我们做了一切,我们只需要实现服务器调用而不考虑应用程序的状态?
Redux is a predictable state container for JavaScript apps.
这就是 Redux 文档的开头。 Redux 不管理你的状态。它只保留它并提供确定性的突变。它教授了一些非常好的实践,实际上它是一款非常智能的软件。但是,如果没有您的一点帮助,它无法解决您的问题。 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;
}
我目前在一家奥地利公司工作,我们正在为Windows开发一个文档管理系统。 2017 年初,我们开始使用 Angular 创建 Web 应用程序。但是,我们开始遇到应用程序状态的一些问题。
我们正在考虑使用 Redux 作为状态管理器,但我们有一个顾虑。
假设我们有一个 table 和 2 个文档
|--------------------------------|
| Document1.pdf |
|--------------------------------|
| Document2.pdf |
|--------------------------------|
我们还有所选文档的预览。
假设我们单击 Doc 1(服务器加载文档需要 5 秒)。单击 Doc1 1 秒后,我们单击 Doc2(服务器加载文档仅需 1 秒)。一秒钟后 Doc2 出现在预览中,但是 4 秒后 Doc1 被加载并显示在预览中。虽然我们目前选择了 Doc2。
当使用 Redux 时,我们是否必须手动检查 "correct" 文档,或者框架为我们做了一切,我们只需要实现服务器调用而不考虑应用程序的状态?
Redux is a predictable state container for JavaScript apps.
这就是 Redux 文档的开头。 Redux 不管理你的状态。它只保留它并提供确定性的突变。它教授了一些非常好的实践,实际上它是一款非常智能的软件。但是,如果没有您的一点帮助,它无法解决您的问题。 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;
}