Redux:处理并发请求的正确方法

时间:2018-01-16 07:04:00

标签: redux

我只是无法掌握我猜的核心概念。

我有一个包含联系人列表的页面。但是用户可以使用URL中的contactID访问该页面,在这种情况下,我应该打开一个带有联系信息的弹出窗口。那么,我在做什么:

我的store看起来像是:

{
    isRequested: boolean, // is initial loading done
    isLoading: boolean,   // is currently loading,
    contacts: {[ key: number ]: IContact} 
    // where key is contact ID and IContact is generic a model
}

打开页面并开始加载联系人列表。 在没有等待联系人的情况下,我打开了弹出窗口。

那么,我应该如何处理这种情况呢?我想到的唯一一件事就是如果商店里不存在虚拟联系人。类似的东西:

{
    ...,
    contacts: {
        1: {
            isRequested: false,
            isLoading: true,
            isCorrupted: false // in case of bad ID
        }
    }
}

在弹出窗口中订阅状态更改,等待此联系人isRequested更改。

当所有联系人加载后 - 添加所有联系人而不加入此联系人,或合并它们。

这是正确的方法,还是存在更好的解决方案?

1 个答案:

答案 0 :(得分:0)

我会保持联系人为空,只需显示加载屏幕,直到加载完整列表。

所以你的州看起来像

{
    isLoading: boolean,   // is currently loading,
    contacts: {[ key: number ]: IContact} 
}

和初始状态

{
  isLoading: false,
  contacts: {}
}

在您看来:

  • 如果联系人是空对象,则不显示任何内容。
  • 首次加载(在React中componentWillMount),加载联系人列表并将isLoading设置为true。
  • isLoading为真时,显示加载屏幕。
  • 列表准备就绪后,显示您的信息