如何在Reducer中移除数组内指定对象?遇过滤失效求修正
修复Reducer中用户数组过滤失效的问题
我一眼就找到问题所在啦!咱们来一步步解决:
首先看你的初始用户状态:
export const initialSettings = { timezone: '', category: '', users: [ { userId: '1', name: 'ABC' }, { userId: '2', name: 'ABCD' }, { userId: '3', name: 'ABCDE' }, { userId: '4', name: 'ABCDEF' }, ] };
这里每个用户对象的ID字段是**userId**(驼峰写法,大写U和I),但你在Reducer的过滤逻辑里写的是item.userid(全小写的id)——字段名大小写不匹配,导致filter永远找不到要删除的用户,自然就没有过滤效果了!
给你修正后的Reducer代码:
switch (...) { case 'ADMIN_REMOVE_RX': const data = action.payload.data; const userId = data?.userId; // 改用和对象一致的字段名,同时用可选链做容错 // 如果userId不存在,直接返回原状态,避免无效操作 if (!userId) return state; return { ...state, users: state.users.filter(item => item.userId !== userId ) }; default: return state; }
几个关键的修正点:
- 把
userid改成和用户对象一致的**userId**,保证字段名完全匹配 - 用
data?.userId替代data && data.userid,语法更简洁的同时做了空值容错 - 增加了
if (!userId) return state的判断,避免在没有有效ID时执行不必要的数组过滤操作
内容的提问来源于stack exchange,提问作者Manav Pandya
相关产品推荐
相关产品推荐

