Моделирование данных на основе временного диапазона с использованием redux / normalizr - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть следующие данные, поступающие из бэкэнда узла:

Конечная точка:

/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, где ваш ключ - это не только идентификатор, но и диапазон дат?

Или я должен посмотретьпри разбивке на отдельный редуктор, как указано выше?

1 Ответ

0 голосов
/ 26 ноября 2018

Не уверен, что я полностью понял проблему здесь.

Поля 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"
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...