繁体   English   中英

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

[英]How should I store isFetching/isLoading data in my redux store?

我正在寻找一种在redux中为实体/数据存储isFetching的通用方法。 目前,我使用normalizr并将所有实体数据存储在实体哈希中。 例如

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

我当时正在考虑在每个实体(即人,订单...)对象上定义一个属性 ,以指定是否要获取数据。 唯一的问题是,如果您执行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;

我认为定义不可枚举的属性将使您的代码库更难维护,因为在调试时,大多数情况下都隐藏了不可枚举的属性。

您可以按照normalizr的示例进行操作, normalizr元数据位于entities旁边。 例如:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM