如何在Redux中使用upsertOne将新增对象添加到数组顶部
实现方案
createEntityAdapter 维护的实体状态中,ids 数组的顺序就是selectAll返回的列表顺序,upsertOne默认会将新实体的id追加到ids末尾,因此新插入的实体会排在列表最后。
不需要依赖实体自带的时间戳、名称等业务字段,直接在upsert操作后调整ids数组顺序即可让最新操作的实体排在顶部:
builder.addCase(getDeviceData.fulfilled, (state, action) => { // 自动适配配置的实体主键,无需硬编码id字段 const targetId = devicesAdapter.selectId(action.payload); devicesAdapter.upsertOne(state, action.payload); // 将当前操作的实体移动到列表首位 state.ids = [targetId, ...state.ids.filter(id => id !== targetId)]; });
方案特性
- 同时兼容新增、更新场景:不管是首次插入的新实体,还是已存在的旧实体,触发该逻辑后都会被移动到列表顶部,符合最新操作内容优先展示的交互逻辑
- 全程仅调整控制顺序的
ids数组,不读取、不修改实体本身的任何业务字段,完全满足不能用时间戳、名称字段排序的限制 - 所有更新由Immer代理处理,不需要手动做不可变拷贝,性能开销极低
内容的提问来源于stack exchange,提问作者kalyani_jamunkar
相关产品推荐
相关产品推荐

