Redux:组合关系需要进行状态规范化吗?

时间:2018-05-19 23:46:59

标签: redux state ngrx

众所周知,在redux存储中保存数据时,它应该转换为规范化状态。所以嵌入对象应该用它们的id替换,并保存在商店的专用集合中。

我想知道,如果关系是作文,那还应该怎么办?这意味着,嵌入数据不能用于父对象之外的任何用途

在我的情况下,嵌入对象是注册,父对象是(现实生活)事件。将这种数据结构标准化给我感觉就像很多样板而没有任何好处。

2 个答案:

答案 0 :(得分:2)

状态规范化不仅仅是通过遍历对象树来访问数据的方式。它还与您观察数据的方式有关。

规范化的部分原因是避免不必要的更改通知。对象被视为不可变对象,因此当它们更改时,会创建一个新对象,以便快速参考检查可以指示对象中的某些内容是否已更改。如果嵌套对象并且子对象发生更改,则应更改父对象。如果某些代码正在观察父级,那么每次子级更改时它都会收到更改通知,即使它可能不关心。因此,根据您的情况,您最终可能会收到大量不必要的更改通知。

这也是您看到分为标识符数组和对象映射的实体列表的部分原因。关于变更检测,这允许您观察列表(是否已添加或删除项目),而无需关心实体本身的更改。

所以这取决于你的用法。只要注意观察的成本以及你的状态对你的影响。

答案 1 :(得分:1)

我不同意数据应该是[标准化]"。规范化是访问数据的有用结构,但您是架构师做出决策的。

在许多情况下,存储的数据将是应用程序单例,而描述性键比强制某种id更有用。

在您的情况下,除非存在过多的数据重复,否则我不会烦恼,特别是因为您必须对该对象进行非规范化以使其正常运行。