使用 redux/normalizr 基于时间范围对数据建模
Modelling data based on a time range using redux/normalizr
我有以下来自节点后端的数据:
端点:
/user/:id?startDate=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: ""
}
不过,我目前正在对这些用户使用 normalizr,并且我有一个名为 ADD_ENTITIES
的操作。拥有一个实体缩减器似乎非常有益,因为我们确实有其他实体可以很好地与这些用户规范化,但是我不想用几乎“附加”的 startDate 和 endDate 来污染实体状态以在所有页面之间同步。
关于我的问题:
有没有更好的方法使用 normalizr 来模拟这个问题,你的关键不仅是 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"
}
}
}
我有以下来自节点后端的数据:
端点:
/user/:id?startDate=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: ""
}
不过,我目前正在对这些用户使用 normalizr,并且我有一个名为 ADD_ENTITIES
的操作。拥有一个实体缩减器似乎非常有益,因为我们确实有其他实体可以很好地与这些用户规范化,但是我不想用几乎“附加”的 startDate 和 endDate 来污染实体状态以在所有页面之间同步。
关于我的问题:
有没有更好的方法使用 normalizr 来模拟这个问题,你的关键不仅是 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"
}
}
}