我一直在努力学习如何更好地构建我的 Redux 存储,并偶然发现了 Dan 的这一课。
https://egghead.io/lessons/javascript-redux-normalizing-the-state-shape#/guidelinesModal
虽然我了解如何以这种方式规范化我的数据,但我不明白其背后的动机。特别是,我有两个问题。
为什么简单的数组不够用?Dan 提到 - “在复杂的应用程序中,我们可能有多个数组,并且不同数组中具有相同 ID 的待办事项可能会不同步”。没看懂,可以举个例子吗?我从使用对象中看到的唯一好处是提高了效率,因为我们不需要映射整个数组,以防我想将某个 todo 委托给另一个 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: []
}
}
我没有看到在这里用对象代替数组的好处。我也可以有选择器,即使它是一个数组,也可以通过 ID 从部门中获取订阅的待办事项。看来我对这个概念的理解有点不足。你能详细说明一下吗?