首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换实体/归一化响应

转换实体/归一化响应
EN

Stack Overflow用户
提问于 2018-11-26 04:39:58
回答 2查看 72关注 0票数 0

我想知道在我的Redux状态设置响应实体(Ies)之前,哪里是转换它的好地方。

示例

  • 我有一个chat_message实体
  • 它具有服务器发送的read布尔属性。
  • 我需要计算一个新的unread布尔属性= !message.read && message.user_id !== currentUser.id

问题

  1. 我是否在getChatMessages选择器(reselect)中计算这个新属性?
  2. 在以我的状态设置规范化响应之前,我是否计算这个新属性?-因此我的问题是“转换”。
  3. 我是否只是在我的Component中计算它,但是这个(简单的)逻辑并没有在整个地方共享和重复.
  4. 我是否从服务器发送unread属性..。

Notes

  • unread属性示例是一个简化的示例。
  • 我不喜欢解决方案1,因为您需要在选择器之间共享这个逻辑。因此,您可能有一个isMessageUnread助手函数,由getLastChatMessage共享,getChatMessages选择器。我也不喜欢选择器做太多的逻辑。
  • 我倾向于解决方案2,只有在接收响应时才计算新的unread属性。
  • 解决方案3是我目前的懒散解决方案(这里和那里都有实验,但没有任何结论)。
  • 我不喜欢解决方案4,这些属性更多的是UI相关的,而不是后端相关的。
  • 如果使用解决方案2.,我觉得reducers不是进行这种转换的好地方。对于简单实体来说可能很容易,但是“重”转换(迭代集合、检查关系等等)又如何呢?我更倾向于将这种新的逻辑排除在选择器、减缩器和实体之外。有点像普通的“插件”/拦截器/转换器/后处理器.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-26 12:45:07

Normalizr提供 option

在预处理实体时使用的策略。使用此方法可以在完成规范化之前添加额外的数据、默认值和/或完全更改实体。

票数 0
EN

Stack Overflow用户

发布于 2018-11-26 08:57:19

解决方案取决于如何使用该属性:

  • 是特定于单个组件的unread属性,用于其呈现目的,而不用于其他任何地方。通知点。如果是,那么您可以使用解决方案3,因为您可以在组件中本地化使用。
  • 如果unread属性需要在组件/中间件之间共享,那么将逻辑放在选择器/还原器中是可行的。但是,如果您要放置在还原器中,询问是否所有订阅chatBox实体的组件都需要chatBox。如果没有,最好把它放在选择器中,只有那些需要它的组件/中间件才能调用它。有额外的运行时计算的权衡,但是它提供了适当的关注点分离,因为如果将来有更多这样的派生属性,这最终将是有益的。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53474863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档