我希望创建一种在redux中为实体/数据存储isFetching的通用方法。目前我使用normalizr并将所有实体数据存储在实体哈希中。例如
{
people: { ... },
orders: { ... }
}
我在考虑defining a property每个实体(即人,订单......)对象,以指定是否正在获取数据。唯一的问题是,如果您执行类似Object.keys的操作,您将在数组中返回一个id + isFetching列表。为了解决这个问题,我想将属性设置为不可枚举。
我的数据相当复杂,我不只是有2个实体,我刚刚简化了这个例子。我正在寻找一种能够在我的代码库中长期存在的解决方案。
这是一个很好的解决方案吗?我不想创建一个新对象来存储元数据(虽然这是一个潜在的解决方案)。是否有更好或更常见的方法?
我知道这有点自以为是,但redux问题指南指出了stackoverflow ...
注意我知道Object.defineProperty的兼容性问题。这是一个内部应用程序,每个人都使用最新版本的chrome。
更新
redux商店中的潜在实施
let initialState = {
entities: {
customers: null,
orders: null
}
};
Object.defineProperty(initialState.entities.customers,
'isFetching',
{
value: false,
writable: true,
enumerable: false
});
Object.defineProperty(initialState.entities.orders,
'isFetching',
{
value: false,
writable: true,
enumerable: false
});
export default initialState;
答案 0 :(得分:2)
我认为定义非可枚举属性会使代码库难以维护,因为在调试时,大多数时候都会隐藏属性不可枚举的事实。
您可以按照normalizr
中的示例操作,并将元数据放在entities
旁边。 E.g:
{
customers: {
entities: {/** contains your normalized customer list*/},
isFetching: false
},
orders: {
entities: {/** contains your normalized order list*/},
isFetching: false
}
}
这也将允许将来进一步扩展元数据。