Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于redux真实示例中的规范化_Redux_React Redux - Fatal编程技术网

关于redux真实示例中的规范化

关于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作为键,项作为值。但是,对象

在的src(UserPage.js)中:

我注意到有很多模板,比如
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"]
}