如何在具有方法的商店(ngrx,ngxs)中存储对象

时间:2019-05-29 10:34:53

标签: angular typescript redux ngrx

我知道Redux模式仅需要将普通对象存储在Store中(这是逻辑上的并且可以理解)。 但是,在该应用程序中,我想使用具有某些功能的对象,例如计算得出的诸如“ hasParent”,“ isReadonly”,“ isValid”之类的方法。

例如,尽管ngrx不禁止存储此类对象,但这可能会导致很多问题

该如何处理此对象存储问题? 我有两个想法: 一种) -在将对象保存到存储区之前,我将对象序列化为纯数据 -从商店读取时,我将纯数据映射到对象(使用映射器或“手动”(使用对象构造函数和设置器)) B) 我从使用类/对象辞职,仅使用纯数据,并将hasParent,isReadonly,isValid方法移至帮助程序/服务。

这些解决方案都没有缺点:(。但是哪种解决方案似乎更好? 也许还有其他方法可以解决上述问题?

1 个答案:

答案 0 :(得分:3)

如何在具有方法的存储区(ngrx,ngxs)中存储对象 ->你不!您将状态存储在商店中。函数不属于状态。 (您似乎在问题详细信息中理解了这一点,但我想再次指出这一点)

关于所需功能:

  • 只读:在大多数情况下,这是对象上的布尔标志。所以我 不知道为什么要使用它作为功能。如果只读是 取决于例如根据用户角色或其他外部因素,将其移动 转换为“实用功能”,请勿将其与存储状态一起存储。 您要保持状态尽可能小。
  • isValid:为什么要在存储区中存储无效数据,然后其他组件可能会使用该无效数据?我个人认为存储中的数据始终是有效的,但也许存在用例。
  • hasParent:我将其更多地视为“ parentId”,您可以从中使用辅助方法获得实际的父对象。但是,不知道你的结构我就不能说。

在仔细考虑之前,先问自己:我真的需要一家商店吗?服务还不够。商店是目前最热门的东西,但是大多数应用程序都不需要它!不要仅仅因为每个人都在谈论它而使用它!