Reactjs 如何为宽数据类型编写redux缩减器?

Reactjs 如何为宽数据类型编写redux缩减器?,reactjs,redux,react-redux,Reactjs,Redux,React Redux,我目前正在从事一个项目,该项目实现了类似于MS project的东西——一个具有非常广泛任务属性的任务管理应用程序 任务的超简单定义可能如下所示: { “id”:0, “说明”:“任务1”, “工作”:8, “起始日期”:0, “已分配资源”:“Scott” } 然而,一个任务最终可能有50多个字段 我对React和React Redux相当陌生,所以如果我误解了一些简单的方法,请原谅我,但我无法理解如何为这样的数据类型编写reducer操作 以下是上述任务的一个示例: 从'@reduxjs/

我目前正在从事一个项目,该项目实现了类似于MS project的东西——一个具有非常广泛任务属性的任务管理应用程序

任务的超简单定义可能如下所示:

{
“id”:0,
“说明”:“任务1”,
“工作”:8,
“起始日期”:0,
“已分配资源”:“Scott”
}
然而,一个任务最终可能有50多个字段

我对React和React Redux相当陌生,所以如果我误解了一些简单的方法,请原谅我,但我无法理解如何为这样的数据类型编写reducer操作

以下是上述任务的一个示例:

从'@reduxjs/toolkit'导入{createSlice,current}
导出常量tasksSlice=createSlice({
名称:“任务”,
初始状态:[],
减速器:{
addTask:(状态、操作)=>{
状态推送(动作有效载荷);
},
deleteTask:(状态、操作)=>{
返回状态.filter(task=>task.id!==action.payload);
},
重置任务:(状态、操作)=>{
让tasks=action.payload;
返回任务;
},
replaceTask:(状态、操作)=>{
const taskIndex=state.tasks.findIndex(task=>task.id==action.payload.id)
返回{
……国家,
任务:[
…state.tasks.slice(0,任务索引),
行动.有效载荷,
…state.tasks.slice(任务索引+1)
]
}
},
setTaskDescription:(状态、操作)=>{
state.map(t=>t.id!==action.payload.id?t:{…t,description:action.payload.description})
} 
}
})
导出常量{resetTasks,addTask,deleteTask,replaceTask}=tasksSlice.actions
导出默认任务slice.reducer
我编写了
replaceTask
,作为一种快速尝试,只需编写所需的更改。但这感觉是错误的——我不能保证验证或某些错误的突变不会进入商店。另一方面,我无法理解必须为任务的每个字段编写操作

相比之下,似乎大多数示例都希望您编写像
settaskscription
这样的操作,但这需要我编写大量的样板文件


是否有我所缺少的标准做法?

假设您有以下任务:

state = {
 tasks: []
}
首先查找索引:

const taskIndex = state.tasks.findIndex(task => task.id == action.payload.id)
现在,替换它:

return {
  ...state,
  tasks: [
    ...state.tasks.slice(0, taskIndex),
    action.payload,
   ...state.tasks.slice(taskIndex+1)
  ]
}

谢谢,我认为您改进了我的
replaceTask
操作,但我的问题是:我应该使用完整任务替换还是单个属性更新?如果是后者,没有一大堆样板,我怎么能做到这一点呢?(我更新了我的Q以使其更清晰)。我是我的例子,单个任务被更新了,即它的所有属性,这就是要走的路。