我想知道在我的Redux状态设置响应实体(Ies)之前,哪里是转换它的好地方。
示例
chat_message实体read布尔属性。unread布尔属性= !message.read && message.user_id !== currentUser.id问题
getChatMessages选择器(reselect)中计算这个新属性?Component中计算它,但是这个(简单的)逻辑并没有在整个地方共享和重复.unread属性..。Notes
unread属性示例是一个简化的示例。isMessageUnread助手函数,由getLastChatMessage共享,getChatMessages选择器。我也不喜欢选择器做太多的逻辑。unread属性。reducers不是进行这种转换的好地方。对于简单实体来说可能很容易,但是“重”转换(迭代集合、检查关系等等)又如何呢?我更倾向于将这种新的逻辑排除在选择器、减缩器和实体之外。有点像普通的“插件”/拦截器/转换器/后处理器.发布于 2018-11-26 12:45:07
Normalizr提供 option
在预处理实体时使用的策略。使用此方法可以在完成规范化之前添加额外的数据、默认值和/或完全更改实体。
发布于 2018-11-26 08:57:19
解决方案取决于如何使用该属性:
unread属性,用于其呈现目的,而不用于其他任何地方。通知点。如果是,那么您可以使用解决方案3,因为您可以在组件中本地化使用。unread属性需要在组件/中间件之间共享,那么将逻辑放在选择器/还原器中是可行的。但是,如果您要放置在还原器中,询问是否所有订阅chatBox实体的组件都需要chatBox。如果没有,最好把它放在选择器中,只有那些需要它的组件/中间件才能调用它。有额外的运行时计算的权衡,但是它提供了适当的关注点分离,因为如果将来有更多这样的派生属性,这最终将是有益的。https://stackoverflow.com/questions/53474863
复制相似问题