Redux/React 状态规范化 - 为什么要维护一个单独的 ID 数组?
Redux/React state normalization - why maintain a separate array of IDs?
在此处按照 Dan Abramov 的教程进行操作:https://egghead.io/lessons/javascript-redux-normalizing-the-state-shape
他似乎没有解释使用一组待办事项 ID (allIds) 维护一个额外的 reducer 的好处,如果只有一个 byId reducer 和用户 Object.keys 或 Object.values 迭代它?
示例待办事项应用显示待办事项列表,按创建顺序排列。无法使用 Object
和 Object.keys
.
以保证跨浏览器工作的方式检索该有序列表
JS Object
属性是无序的,但是数组是有顺序的。因此 Object.keys()
的输出顺序不能保证与添加键的顺序有任何关系。该数组允许 reducer 按添加顺序显示待办事项。
理论上 you could use a Map
,因为 Map
中的键是有序的。但是,无法对 Map
的内容重新排序。使用数组,您可以重新排序 ID,而无需触摸待办事项本身。
换句话说,数组数据结构比Object
和Map
更适合存储有序列表。
在此处按照 Dan Abramov 的教程进行操作:https://egghead.io/lessons/javascript-redux-normalizing-the-state-shape
他似乎没有解释使用一组待办事项 ID (allIds) 维护一个额外的 reducer 的好处,如果只有一个 byId reducer 和用户 Object.keys 或 Object.values 迭代它?
示例待办事项应用显示待办事项列表,按创建顺序排列。无法使用 Object
和 Object.keys
.
JS Object
属性是无序的,但是数组是有顺序的。因此 Object.keys()
的输出顺序不能保证与添加键的顺序有任何关系。该数组允许 reducer 按添加顺序显示待办事项。
理论上 you could use a Map
,因为 Map
中的键是有序的。但是,无法对 Map
的内容重新排序。使用数组,您可以重新排序 ID,而无需触摸待办事项本身。
换句话说,数组数据结构比Object
和Map
更适合存储有序列表。