我一直在努力学习如何更好地构建我的Redux商店,并偶然发现Dan的这一课.
https://egghead.io/lessons/javascript-redux-normalizing-the-state-shape#/guidelinesModal
虽然我理解如何以这种方式规范化我的数据,但我不明白它背后的动机.特别是,我有两个问题.
为什么简单的数组不够用?Dan提到 - "在复杂的应用程序中,我们可能有不止一个阵列,并且在不同阵列中具有相同ID的待机可能会失去同步".我不明白这个,我可以举一个例子吗?我在使用对象时看到的唯一好处是提高了效率,因为我们不需要映射整个数组,以防我想将某个待办事项委托给另一个reducer.
为什么我们需要维护allIds列表?当我们可以轻松地映射所有待办事项列表并获取它时,为什么要保持这种额外状态?
我知道normalizr会为我们做这件事,但为什么我们首先应该正常化呢?即使响应没有深度嵌套,标准化也有意义吗?
编辑1:
感谢您的回答,克里斯托弗.
让我们假设您的状态树看起来像这样
{
user: {
byId: {
1: {
id: 1,
name: 'Buy stuff'
},
2: {
id: 2,
name: 'Yeah'
}
}
},
allIds: [1, 2],
subscribedIds: [5],
}
department: {
byId: {
5: {
id: 5,
name: 'Sell Stuff'
}
},
allIds: [5],
subscribedIds: []
}
}
Run Code Online (Sandbox Code Playgroud)
我没有看到在这里有一个对象代替数组的好处.我也可以选择能够从部门获取ID订阅的待办事项,即使它是一个数组.看来我对这个概念的理解有点不足.你能详细说明吗?