Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Redux中异步维护状态完整性_Redux_React Redux - Fatal编程技术网

在Redux中异步维护状态完整性

在Redux中异步维护状态完整性,redux,react-redux,Redux,React Redux,假设我有一个Redux商店。其状态具有userCoordinates字段 使用用户的当前坐标: { userCoordinates: [3.1457, 2.1728], ... } { ... nearbyFriends: ["Bob", "Jimmy"], nearbyShops: ["Point & Click tools", "Bobby Ray's"], address: "42 Enth Street, Townsville,

假设我有一个Redux商店。其状态具有
userCoordinates
字段 使用用户的当前坐标:

{
    userCoordinates: [3.1457, 2.1728],
    ...
}
{
    ...
    nearbyFriends: ["Bob", "Jimmy"],
    nearbyShops: ["Point & Click tools", "Bobby Ray's"],
    address: "42 Enth Street, Townsville, Countryland",
    weather: "Cloudy",
    ...
}
然后假设存储区还有20个字段,其中包含的数据取决于 坐标:

{
    userCoordinates: [3.1457, 2.1728],
    ...
}
{
    ...
    nearbyFriends: ["Bob", "Jimmy"],
    nearbyShops: ["Point & Click tools", "Bobby Ray's"],
    address: "42 Enth Street, Townsville, Countryland",
    weather: "Cloudy",
    ...
}
所有这些字段中的值都是通过HTTP从 各种服务,每个字段一个单独的请求

现在假设更新了用户的地理位置,并发送了一个操作 更改用户坐标的值:

dispatch(updateCoords([1.6180, 1.4142]));
现在,
userCoordinates
有了新的坐标,所有其他20个字段都有无效数据

  • 如果目标只是保持所有字段“最终”有效,那么我在哪里请求获取新数据
  • 如果我使用React Redux,并且有许多组件使用这些字段的许多不同组合,有些字段由多个组件使用,有些字段根本不使用,那么该方法会发生什么变化

  • 根据架构的不同,我会做两件事中的一件

    1:比较减速器中的状态。如果状态中的用户坐标发生变化,您可以向存储添加类似于
    updateNeeded:true
    的内容,然后在加载其他数据的任何位置进行检查,这样,如果
    updateNeeded
    为true,您就可以启动ajax调用从服务器获取新数据

    2:如果设置正确,您可以使用
    组件将接收道具
    来比较道具。如果
    用户坐标发生变化
    ,则发送操作以获取其他数据字段


    当然,如果您只需一次调用就可以获得所有数据,那么这会更容易…

    根据架构的不同,我会做以下两件事之一

    1:比较减速器中的状态。如果状态中的用户坐标发生变化,您可以向存储添加类似于
    updateNeeded:true
    的内容,然后在加载其他数据的任何位置进行检查,这样,如果
    updateNeeded
    为true,您就可以启动ajax调用从服务器获取新数据

    2:如果设置正确,您可以使用
    组件将接收道具
    来比较道具。如果
    用户坐标发生变化
    ,则发送操作以获取其他数据字段


    当然,如果您只需一次调用就可以获得所有数据,这会更容易…

    我已经尝试过这种方法,但根据我的经验,这种方法无法扩展。想象一下,拥有40个组件,并在代码中编写和维护这些道具/挂载挂钩!更不用说处理重复的请求了。在这一点上,我会更好地使用标准的React。我已经尝试过这种方法,但在我的经验中它是不可伸缩的。想象一下,拥有40个组件,并在代码中编写和维护这些道具/挂载挂钩!更不用说处理重复的请求了。在这一点上,我会更好地与标准反应。