Redux中如何正确更新嵌套对象内部数组的单个元素
问题分析
- 错误1:误用
Array.filter()方法filter的作用是筛选数组元素,回调函数需要返回布尔值来决定当前元素是否保留。你在回调中返回的是字符串/元素值,所有非空字符串都会被判定为true,因此filter执行完会返回原完整数组。 - 错误2:额外嵌套了一层数组
你把filter返回的整个数组又套在了一对[]里,最终得到的cities会是嵌套结构[原cities数组],完全不符合预期。 - 错误3:方法选择错误
你要做的是按索引替换数组元素,应该用Array.map()而不是filter,map会遍历每一个元素,返回替换后的新值,正好匹配你的需求。
修正后的代码
case "SET_IN_CITIES_ARRAY": return { ...state, currentFilters: { ...state.currentFilters, cities: state.currentFilters.cities.map((c, i) => i === action.payload.index ? action.payload.id : c ), }, };
执行后当action.payload.id = "Warsaw"、action.payload.index = 1时,得到的cities就是你预期的["Berlin", "Warsaw", "Madrid"]。
内容的提问来源于stack exchange,提问作者some nooby questions
相关产品推荐
相关产品推荐

