问题

我有以下代码

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

  相同标签的其他问题

javascriptarraysreactjsredux