我想知道在将响应实体设置为Redux状态之前,在哪里转换响应实体的好地方。
示例
chat_message
实体read
布尔属性unread
布尔属性= !message.read && message.user_id !== currentUser.id
问题
getChatMessages
选择器(reselect
)中计算这个新属性?Component
中计算它,但是这个逻辑(简单)并未在整个地方共享和重复... unread
属性... 注释
unread
属性示例是一个简化示例。isMessageUnread
,getLastChatMessage
选择器共享的getChatMessages
辅助函数。我也不喜欢选择器做太多的逻辑。unread
属性。reducers
不是进行此转换的好地方。对于简单的实体来说可能很容易,但是“繁重”的转换(遍历集合,检查关系等)呢?我更喜欢将新逻辑放在选择器,简化器和实体之外。有点像normalizr的“插件” /拦截器/变压器/后处理器... 答案 0 :(得分:0)
解决方案取决于如何使用属性:
是unread
属性专用于单个组件的呈现目的,在其他任何地方都没有使用。例如:通知点。如果是,那么您可以使用解决方案3,因为您可以在组件内部定位使用情况。
如果需要在组件/中间件之间共享unread
属性,则可以将逻辑放在选择器/缩减器中。但是,如果要放置在化简器中,请询问预订unread
实体的所有组件是否都需要chatBox
。如果不是这样,最好将其放置在选择器中,该选择器只能由需要它的那些组件/中间件调用。有一个额外的运行时计算权衡,但是它提供了适当的关注点分离,因为如果将来有更多这样的派生属性,最终将受益。
答案 1 :(得分:0)
Normalizr提供了processStrategy
option:
预处理实体时要使用的策略。使用此方法添加 额外的数据,默认值和/或之前完全更改实体 标准化完成。