首页 > 解决方案 > 修改数组对象的元素属性时,Redux 存储未更新

问题描述

我有以下代码

case 'COMPLETE_TODO' :
state.todos[state.todos.findIndex((obj => obj.id == action.value))].status = "COMPLETED"
return {
   ...state,
   todos: state.todos
}

我觉得数组不被视为修改后的数组,因为只有一个元素的属性已更新。

任何想法?

谢谢

标签: javascriptarraysreactjsredux

解决方案


不要改变状态,复制状态然后对其执行操作

case 'COMPLETE_TODO' :   
 return {
    ...state,
    todos: state.todos.map(obj=> ({...obj, status: obj.id == action.value ? "COMPLETED" : obj.status}))
 }

map创建一个新数组,...传播语法创建一个浅拷贝,如果你的对象比一层更深,那么你应该做一个深克隆,

对于深度克隆,您可以使用

 let deepCopy = JSON.parse(JSON.stringify(state.todos))

推荐阅读