Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 修改数组对象的元素属性时,Redux存储未更新_Javascript_Arrays_Reactjs_Redux - Fatal编程技术网

Javascript 修改数组对象的元素属性时,Redux存储未更新

Javascript 修改数组对象的元素属性时,Redux存储未更新,javascript,arrays,reactjs,redux,Javascript,Arrays,Reactjs,Redux,我有下面的代码 case 'COMPLETE_TODO' : state.todos[state.todos.findIndex((obj => obj.id == action.value))].status = "COMPLETED" return { ...state, todos: state.todos } 我觉得数组没有被当作修改过的数组,因为只有一个元素的属性被更新了 有什么想法吗 谢谢不要改变状态,复制状态然后对其执行操作 case 'COMPLETE_TOD

我有下面的代码

case 'COMPLETE_TODO' :
state.todos[state.todos.findIndex((obj => obj.id == action.value))].status = "COMPLETED"
return {
   ...state,
   todos: state.todos
}
我觉得数组没有被当作修改过的数组,因为只有一个元素的属性被更新了

有什么想法吗

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

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))

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