You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Redux如何从state数组中删除对象 运行无返回如何解决?

问题原因
  • 数组结构错误:DELETE_MOVEMENT分支中filter方法本身已经返回新数组,外层额外包裹的[]会把过滤结果变成二维数组,页面按原有一维数组逻辑渲染时无法正常读取对象属性,导致空白。
  • 删除逻辑反向:filter会保留回调返回真值的元素,现有逻辑会保留命中删除条件的对象,反而把需要保留的对象过滤掉。
  • 属性名不匹配:示例state中对象的唯一标识属性是name,但reducer中判断条件全部使用movementName,永远无法匹配到目标对象,更新、删除逻辑都会失效。
  • 错误使用字符串代替布尔值:现有代码返回"true"/"false"字符串,虽然非空字符串在JS中会被判定为真值,但属于不符合预期的错误写法。
修复方案

直接替换为修正后的reducer代码即可:

const initialState = [];

const movementReducer = (state = initialState, action) => {
    switch (action.type) {
        case ADD_MOVEMENT: 
            return [ 
                ...state, action.payload
            ];
        case UPDATE_MOVEMENT:
            // 统一使用name属性匹配,map本身返回新数组无需额外展开
            return state.map(item => item.name === action.payload.name ? action.payload : item);
        case DELETE_MOVEMENT:
            // 去掉外层多余数组括号,保留不匹配删除条件的对象,直接返回布尔值
            return state.filter(item => item.name !== action.payload.name);
        default:
            return state;
    }
};

export default movementReducer;

注意:触发DELETE_MOVEMENT和UPDATE_MOVEMENT action时,payload中需要携带对应动作的name属性用于匹配。

内容的提问来源于stack exchange,提问作者Victor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 00:36:01