首页 文章

我应该如何在我的redux商店中存储isFetching / isLoading数据?

提问于
浏览
0

我希望创建一种在redux中存储实体/数据的isFetching的通用方法 . 目前我使用normalizr并将所有实体数据存储在实体哈希中 . 例如

{
   people: { ... },
   orders: { ... }
}

我想在每个实体(即人,订单......)对象上defining a property来指定是否正在获取数据 . 唯一的问题是,如果您执行类似Object.keys的操作,您将在数组中返回一个id isFetching列表 . 为了解决这个问题,我想将属性设置为不可枚举 .

我的数据相当复杂,我不只是有2个实体,我刚刚简化了这个例子 . 我正在寻找一种能够在我的代码库中长期存在的解决方案 .

这是一个好的解决方案吗?我不想仅仅为了存储元数据而创建一个新对象(尽管这是一个潜在的解决方案) . 有更好或更常见的方法吗?

我知道这有点自以为是,但redux问题指南指出了stackoverflow ...

注意我知道Object.defineProperty的兼容性问题 . 这是一个内部应用程序,每个人都使用最新版本的chrome .

UPDATE

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;

1 回答

  • 2

    我认为定义非可枚举属性会使您的代码库难以维护,因为在调试时大多数时候隐藏了属性不可枚举的事实 .

    您可以按照 normalizr 中的示例操作,并将元数据放在 entities 旁边 . 例如 . :

    {
      customers: {
        entities: {/** contains your normalized customer list*/},
        isFetching: false
      },
      orders: {
        entities: {/** contains your normalized order list*/},
        isFetching: false
      }
    }
    

    这也将允许将来进一步扩展元数据 .

相关问题