Reactjs 使用redux/normalizer基于时间范围建模数据

Reactjs 使用redux/normalizer基于时间范围建模数据,reactjs,redux,normalizr,Reactjs,Redux,Normalizr,我有来自节点后端的以下数据: 终点: /user/:id?起始日期=2011-10-05T14:48:00.000Z&endDate=2011-10-05T14:48:00.000Z [ { "name": "Tom", "createdAt": "2011-10-05T14:48:00.000Z", "updatedAt": "2011-10-

我有来自节点后端的以下数据:

终点:

/user/:id?起始日期=2011-10-05T14:48:00.000Z&endDate=2011-10-05T14:48:00.000Z

[
   {
      "name": "Tom",
      "createdAt": "2011-10-05T14:48:00.000Z",
      "updatedAt": "2011-10-05T14:48:00.000Z",
      ...
      "metadata": {
         "activeHours": 134.45,
         "afkHours": 134.45
      }
   },
   {
      ...
   }
]
在这些数据中,日期更改之间唯一修改的是activeHours和afkHours

这些用户和调用端点的日期必须在所有页面上同步

简单的方法是将其放在用户缩减器中,类似于:

{
   users: [...],
   startDate: "",
   endDate: ""
}
但是,我目前正在对这些用户使用normalizer,并且有一个操作名为
ADD\u ENTITIES
。拥有一个entities reducer似乎非常有益,因为我们有其他可以很好地与这些用户规范化的实体,但是我不想因为几乎“固定在”startDate和endDate以在所有页面上同步而污染实体状态

关于我的问题:

有没有更好的方法使用normalizer来建模这个问题,在normalizer中,您的键不仅是ID,而且是日期范围?
或者我应该像上面那样把它分解成一个单独的减速器吗?

不确定我是否完全理解这里的问题

每个用户的
startDate
endDate
字段是否不同?如果是,则可能需要为这些用户在规范化实体对象中添加这些字段

如果这些是所有用户的公共字段,则可以创建一个名为
userDateRange
的单独实体,其中包含这两个键。它不需要规范化,因为它们是基本字段

{
  "entities": {
    "user": {
      "byId": {
        "user1": {},
        "user2": {}
      },
      "allIds": [
        "user1",
        "user2"
      ]
    }
  },
  "ui": {
    "userDateRange": {
      "start": "2011-10-05T14:48:00.000Z",
      "end": "2011-10-05T14:48:00.000Z"
    }
  }
}

我想你已经明白了!抱歉,应该更清楚,所有用户都是一样的,每次我们在选择器中选择新的日期范围时,它都必须再次呼叫并更新规范化用户。但这是一个好消息,唯一的问题是,我在其中放置了
userDateRange
?用一个示例状态形状更新了答案。由于选定的日期值不是来自服务器,更像是用户特定的输入,所以可以将它们保留在实体之外。在另一个名为
ui
的块中说。我通常将服务器端(API响应)和客户端(表单状态、过滤器)实体分离到不同的简化程序,以保持简单。如果您使用的是第三方表单库,如
redux form
,这将自动完成。感谢您的建议!我想我唯一担心的是,这样做,我将开始和结束日期从机器状态中分离出来,我认为它们与该状态非常相关?也许我对这个问题想得太多了,我很可能会同意。再次感谢!将它们分开的一个原因是,假设明天获取其他实体也需要相同的日期范围。因此,不必为此创建单独的副本,而是可以重用该副本。同样,这是针对应用程序的,没有完美的答案。非常正确!我会接受这个,因为我认为你是对的:)