reactjs - 将对象替换为 React 状态下的另一个对象

标签 reactjs state react-hooks reducers

我有一个对象数组。我找到了需要替换的对象,但无法在状态下替换它。原始对象保持不变,我想要替换它的对象被添加到数组的末尾。我正在使用 React hooks。谢谢

case types.ADD_USERNAME: 
  let task = action.payload
  let assignedTask = state.tasks.find(el => el.id === task.id)
  let index = state.tasks.indexOf(assignedTask)

  return {
    ...state, 
    tasks: [
      ...state.tasks,
      assignedTask = {
        ...assignedTask,
        user: task.user.name
      }
    ]
} 

最佳答案

您可以使用 map 而不是通过索引并查找元素来更新状态,我认为这是一种更干净的方法

case types.ADD_USERNAME: 
  let task = action.payload;

  return {
    ...state, 
    tasks: state.tasks.map(el => {
        if(el.id == task.id) {
           return { ...el, user: task.user.name} 
        }
        return el;
    });
} 

但是,如果您希望采用索引和查找元素方法,则需要对任务数组进行切片并更新特定索引元素

case types.ADD_USERNAME: 
  let task = action.payload
  let index= state.tasks.findIndex(el => el.id === task.id);

  return {
    ...state, 
    tasks: [
      ...state.tasks.slice(0, index - 1),
      {
        ...state.tasks[index],
        user: task.user.name
      }
      ...state.tasks.slice(index + 1)
    ]
} 

关于reactjs - 将对象替换为 React 状态下的另一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58940210/

相关文章:

reactjs - 在 Redux 中访问中间件中的状态

javascript - 在 ReactJS 中停止选择下一个 span/div 中的文本

javascript - 如何过滤掉 react 表中日期范围之间的日期

c - 防止不良和必要的递归

javascript - 如何使用 useMemo 钩子(Hook)来内存 child

javascript - React js从事件中调用函数

javascript - 为什么 setState 也会改变我之前添加到 state 中的 props

javascript - 在 React 组件中在哪里设置依赖于 Prop 的状态?

reactjs - 使用jest 模拟react-router-dom 钩子(Hook)不起作用

javascript - 如何使组件 "wait"在react中更新状态?