如何在 Redux 中处理列表和单个元素的不同 api

How to handle different api for list and single element in Redux

大家好

我有以下问题。 假设我们有一个表示设备列表的应用程序 并且用户可以进入单个设备的卡片并查看有关它的全部信息。

我们的api看起来如下:

对于列表:

[ { name: 'Device 1', id: 1 }, { name: 'Device 2', id: 2 }, { name: 'Device 3', id: 3 }, { name: 'Device 4', id: 4 } ]

对于单个设备:

{ name: 'Device 1', id: '1', elements: [{ type: 'switch', name: 'socket' }, { type: 'multilevel', name: 'bulb' }], room: { name: 'living', id: 2 } }

如您所见,设备列表的 api 更轻量级。我们不想为列表发出更多的数据库请求,也不想让用户为列表获取不必要的数据。

现在,假设用户可以在设备卡中编辑 'name' 设备,例如。

我应该如何处理我的状态? 我应该将此状态存储在两个地方吗?

或者我应该这样处理我的状态树: 应用程序获取列表和我标记为 'complete: false'

的每个设备对象

{ '1': { id: 1, name: 'Device 1', complete: false }, '2': { id: 2, name: 'Device 2', complete: false } }

但是,当用户使用卡时,我们获取整个设备数据,然后分配给我们的列表对象,'complete' 标志等于 'true'。 并且在两个地方处理状态的问题都消失了。

任何帮助将不胜感激。

我宁愿商店中没有重复数据,因为这会导致所有常见问题(正如您已经提到的)。所以我的首选模型是第二个模型,其中包含所有列表条目的列表或地图。选择列表还是地图取决于您的要求,例如固定顺序,地图无法轻松实现。

我不会为了完整性而引入标志,而是让对象数据自行确定。在您的情况下,如果 !entry.elements && !entry.room,则对象尚未完成,您需要获取其他数据并将其添加到对象中。我不会有标志,因为标志是冗余信息,可能会再次不同步。