关于redux真实示例中的规范化
在的src(UserPage.js)中: 我注意到有很多模板,比如关于redux真实示例中的规范化,redux,react-redux,Redux,React Redux,在的src(UserPage.js)中: 我注意到有很多模板,比如xxx.ids.map(id=>someEntities[id]),我不知道为什么要使用这个模式来工作。在我看来,我会使用类似于import{map}的东西从'lodash'导入;容器组件中的someList和map(someList,item=>{…}),只需在mapstatetrops中传递实体即可 那么,有人能解释一下它的用途吗?谢谢。在Redux中规范化数据的标准建议是将数据项存储在对象中,ID作为键,项作为值。但是,对象
xxx.ids.map(id=>someEntities[id])
,我不知道为什么要使用这个模式来工作。在我看来,我会使用类似于import{map}的东西从'lodash'导入;容器组件中的someList和map(someList,item=>{…})
,只需在mapstatetrops
中传递实体即可
那么,有人能解释一下它的用途吗?谢谢。在Redux中规范化数据的标准建议是将数据项存储在对象中,ID作为键,项作为值。但是,对象没有其固有的顺序。(从技术上讲,对象键的迭代顺序应该是一致的,但将其作为唯一的排序方式是一种不好的做法。) 因此,存储一个ID数组也是标准的。典型的示例可能如下所示:
{
byId : {
qwerty : { },
abcd : { },
aj42913 : { }
},
items : ["qwerty", "aj42913", "abcd"],
sorted : ["abcd", "aj42913", "qwerty"],
selected : ["qwerty", "abcd"]
}
在本例中,items
包含所有项目ID,可能是按照它们插入的顺序sorted
以某种排序顺序包含ID,而selected
包含ID的子集
这允许项目本身只存储一次,而这些项目的多个表示形式可以使用各种ID数组保存
从这里,您可以通过映射您所关心的任何ID数组,并通过它们的ID检索实际项目的列表
因此,最终的答案是,仅仅依靠
byId
对象的键不会给您任何排序,也不允许定义数据的子集。我不太确定我是否理解这个问题。您是在询问通过ID映射来获取项目列表的想法,还是使用Array.map()
而不是\u.map()
?谢谢您的回答。我的意思是,不必“通过ID映射来获取项目列表”,我们可以从“lodash”执行类似于import{map}的操作;someList&&map(someList,item=>{…})
也能正常工作。我们使用lodash.map
而不是Array.prototype.map
是因为我们的数据是由Normalizer
库规范化的,所以这些项是一个对象而不是数组@Markerikson我反对示例中的way(例如,xxx.ids.map(id=>someEntities[id])
)的原因是,在这个步骤完成之前,这个步骤之后的结果数据已经存在。正如我上面所说的,我们可以通过normalizer
库从规范化数据传递实体)在MapStateTops中,我们的容器组件@markerikson的另一个原因是它增加了样板代码谢谢你的回复。在我的项目中,有一些项目非常简单(例如,没有嵌套),它们的id只是数字(例如,迭代对象的顺序必须与数组相同),这就是为什么我要发这个问题。但我相信我知道你的意思。所以,再次感谢你@马克里克森
{
byId : {
qwerty : { },
abcd : { },
aj42913 : { }
},
items : ["qwerty", "aj42913", "abcd"],
sorted : ["abcd", "aj42913", "qwerty"],
selected : ["qwerty", "abcd"]
}