【发布时间】:2019-04-27 17:30:09
【问题描述】:
我想知道在将响应实体设置为我的 Redux 状态之前转换响应实体的好地方在哪里。
示例
- 我有一个
chat_message实体 - 它有一个由服务器发送的
read布尔属性 - 我需要计算一个新的
unread布尔属性 =!message.read && message.user_id !== currentUser.id
问题
- 我是否在
getChatMessages选择器 (reselect) 中计算这个新属性? - 在我的状态设置标准化响应之前,我是否计算这个新属性? – 因此我的问题是“变换”
- 我只是在我的
Component中计算它,但是这个(简单)逻辑不会在所有地方共享和复制... - 我是否从服务器发送
unread属性...
备注
-
unread属性示例是一个简化示例。 - 我不喜欢解决方案 1,因为无论如何您都需要在选择器之间共享此逻辑。所以你可能有一个由
getLastChatMessage、getChatMessages选择器共享的isMessageUnread辅助函数。我也不喜欢选择器做太多逻辑。 - 我倾向于解决方案 2。新的
unread属性仅在接收响应时计算。 - 解决方案 3. 是我目前的惰性解决方案(到处都有实验,但没有任何结论)
- 我不喜欢解决方案 4。这些属性与 UI 相关,而不是与后端相关。
- 如果使用解决方案 2,我觉得
reducers不是进行此转换的好地方。对于简单的实体来说可能很容易,但是“重”转换(迭代集合、检查关系等)呢?我更愿意把这个新逻辑放在:选择器、reducers 和实体之外。有点像 normalizr“插件”/拦截器/变压器/后处理器...
【问题讨论】: