我应该如何在我的 redux 存储中存储 isFetching/isLoading 数据?
How should I store isFetching/isLoading data in my redux store?
我正在寻找一种通用的方法来在 redux 中为 entities/data 存储 isFetching。目前我使用 normalizr 并将我所有的实体数据存储在实体哈希中。例如
{
people: { ... },
orders: { ... }
}
我在考虑 defining a property 在每个实体(即人、订单...)对象上指定是否正在获取数据。唯一的问题是,如果您执行 Object.keys 之类的操作,您将在数组中 return 一个 ids + isFetching 列表。为了克服这个问题,我想将 属性 设置为不可枚举。
我的数据相当复杂,我不只有 2 个实体,我只是针对示例进行了简化。我正在寻找一种可以在我的代码库中长期生存的解决方案。
这是一个好的解决方案吗?我不想创建一个新对象来存储元数据(尽管这是一个潜在的解决方案)。是否有更好或更通用的方法?
我知道这有点自以为是,但 redux 问题指南将我指向 Whosebug ...
请注意,我知道 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;
我认为定义不可枚举的属性会使您的代码库更难维护,因为 属性 不可枚举的事实在调试时大部分时间都是隐藏的。
您可以按照 normalizr
中的示例,将元数据放在 entities
旁边。例如:
{
customers: {
entities: {/** contains your normalized customer list*/},
isFetching: false
},
orders: {
entities: {/** contains your normalized order list*/},
isFetching: false
}
}
这也允许将来进一步扩展元数据。
我正在寻找一种通用的方法来在 redux 中为 entities/data 存储 isFetching。目前我使用 normalizr 并将我所有的实体数据存储在实体哈希中。例如
{
people: { ... },
orders: { ... }
}
我在考虑 defining a property 在每个实体(即人、订单...)对象上指定是否正在获取数据。唯一的问题是,如果您执行 Object.keys 之类的操作,您将在数组中 return 一个 ids + isFetching 列表。为了克服这个问题,我想将 属性 设置为不可枚举。
我的数据相当复杂,我不只有 2 个实体,我只是针对示例进行了简化。我正在寻找一种可以在我的代码库中长期生存的解决方案。
这是一个好的解决方案吗?我不想创建一个新对象来存储元数据(尽管这是一个潜在的解决方案)。是否有更好或更通用的方法?
我知道这有点自以为是,但 redux 问题指南将我指向 Whosebug ...
请注意,我知道 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;
我认为定义不可枚举的属性会使您的代码库更难维护,因为 属性 不可枚举的事实在调试时大部分时间都是隐藏的。
您可以按照 normalizr
中的示例,将元数据放在 entities
旁边。例如:
{
customers: {
entities: {/** contains your normalized customer list*/},
isFetching: false
},
orders: {
entities: {/** contains your normalized order list*/},
isFetching: false
}
}
这也允许将来进一步扩展元数据。