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

标签 javascript redux normalizr

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

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

我在想defining a property在每个实体(即人员、订单...)对象上指定是否正在获取数据。唯一的问题是,如果你执行类似 Object.keys 的操作,你将在数组中返回 ids + 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 中的示例进行操作,并将元数据放在实体旁边。例如:

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

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

关于javascript - 我应该如何在我的 redux 存储中存储 isFetching/isLoading 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40083294/

相关文章:

javascript - 测试一个函数是否在另一个函数 Jest 中被调用

javascript - 如何使用 Normalizr 来展平具有不同类型对象的数组?

javascript - 在这种情况下使用闭包有好处吗

javascript - 重构查找函数

javascript - V-for 迭代破坏了样式

reactjs - 如何使用redux工具包动态生成reducer和action类型?

javascript - 什么被认为是普通对象?

javascript - 在 React/Redux 中创建新项目并稍后保存到服务器

reactjs - Normalizr + Redux - 更新单个实体的属性

javascript - 不同域的 IFrame 中的 Google 跟踪代码管理器