使用Redux / Normalizr根据时间范围建模数据

时间:2018-11-26 11:03:56

标签: reactjs 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,而且是日期范围?

还是我应该像上面那样将其分解为单独的减速器?

1 个答案:

答案 0 :(得分:1)

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

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

如果这些是所有用户的公用字段,则可以创建一个名为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"
    }
  }
}