Интересно, где хорошее место для преобразования объекта (ов) ответа, прежде чем он будет установлен в моем состоянии Redux.
Пример
- Iесть
chat_message
сущность - Имеет логическое свойство
read
, отправленное сервером - Мне нужно вычислить новое логическое свойство
unread
= !message.read && message.user_id !== currentUser.id
Вопросы
- Вычислить ли этот новый атрибут в селекторе
getChatMessages
(reselect
)? - Вычислить этот новый атрибутпрежде чем установить нормализованный ответ в моем состоянии?- Отсюда мой вопрос «Преобразование»
- Должен ли я просто вычислить его в моем
Component
, но эта (простая) логика не разделяется и не дублируется повсеместно ... - Должен ли яотправить атрибут
unread
с сервера ...
Примечания
unread
Пример примера является упрощенным. - Мне не нравится решение 1. В любом случае вам нужно разделить эту логику между селекторами.Таким образом, у вас может быть вспомогательная функция
isMessageUnread
, совместно используемая селекторами getLastChatMessage
, getChatMessages
.Мне также не нравятся селекторы, выполняющие слишком много логики. - Я бы склонялся к решению 2. Новый атрибут
unread
вычисляется только при получении ответа. - Решение 3. Мой текущий ленивыйрешение (с экспериментами тут и там, но на самом деле ничего окончательного)
- Мне не нравится решение 4. Эти атрибуты больше связаны с пользовательским интерфейсом, чем с бэкэндом.
- При использовании решения 2.Я чувствую, что
reducers
не очень хорошее место для таких трансформаций.Может быть легко для простых объектов, но как насчет «тяжелого» преобразования (итерации по коллекциям, проверка отношений и т. Д.)?Я бы предпочел поместить эту новую логику вне: селекторов, редукторов и сущностей.Вроде как нормализр "плагин" / перехватчик / преобразователь / постпроцессор ...