Redux-ToolKit中createEntityAdapter的setMany与setAll函数有何区别?
setMany 与 setAll 的核心区别 数据替换逻辑完全不同
setAll是彻底替换整个实体集合:它会清空当前所有已存的实体,把传入的数组直接作为新的全部数据。简单说就是“旧数据全丢,新数据全上”。setMany是增量更新/新增指定实体:不会动现有集合里没被传入的实体,只会更新传入数组中ID匹配的条目,遇到新ID的话就直接添加进去。相当于“只改指定的,剩下的原样留着”。
适用场景不一样
- 用
setAll:比如页面初始化加载全量列表、下拉刷新拿到最新的完整数据,需要把旧数据全部换掉的时候。 - 用
setMany:比如分页加载下一页数据、批量修改了几条数据后同步更新,只需要更新这些特定条目,不想动其他已有数据的时候。
- 用
实际效果对比(代码示例)
假设当前实体集合是:{ ids: [1, 2], entities: { 1: { id: 1, name: "Alice" }, 2: { id: 2, name: "Bob" } } }调用
setAll([{ id: 2, name: "Bobby" }, { id: 3, name: "Charlie" }])后,集合变成:{ ids: [2, 3], entities: { 2: { id: 2, name: "Bobby" }, 3: { id: 3, name: "Charlie" } } }原来的ID 1实体被彻底移除,整个集合被新数组替换。
调用
setMany([{ id: 2, name: "Bobby" }, { id: 3, name: "Charlie" }])后,集合变成:{ ids: [1, 2, 3], entities: { 1: { id: 1, name: "Alice" }, 2: { id: 2, name: "Bobby" }, 3: { id: 3, name: "Charlie" } } }ID 1的实体保留,ID 2的被更新,ID 3的被新增。
内容的提问来源于stack exchange,提问作者Evgeniy S.
相关产品推荐
相关产品推荐

