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
,这将自动完成。感谢您的建议!我想我唯一担心的是,这样做,我将开始和结束日期从机器状态中分离出来,我认为它们与该状态非常相关?也许我对这个问题想得太多了,我很可能会同意。再次感谢!将它们分开的一个原因是,假设明天获取其他实体也需要相同的日期范围。因此,不必为此创建单独的副本,而是可以重用该副本。同样,这是针对应用程序的,没有完美的答案。非常正确!我会接受这个,因为我认为你是对的:)