Reactjs 更新/插入嵌套对象React/Redux

Reactjs 更新/插入嵌套对象React/Redux,reactjs,redux,react-redux,Reactjs,Redux,React Redux,我在Redux存储中的数组中有一个JSON对象 editor: [] 1 item 0: {} 1 key flow {} 3 keys id: "1234" name: "qaz" tasks: [] 5 items 更新或插入新任务数组的最佳方法是什么 我的行为是 export function insertTasks(tasks) { return { type: 'INSERT_TASKS',

我在Redux存储中的数组中有一个JSON对象

editor: [] 1 item
    0: {} 1 key
      flow {}  3 keys
         id: "1234"
         name: "qaz"
         tasks: [] 5 items
更新或插入新任务数组的最佳方法是什么

我的行为是

export function insertTasks(tasks) {
  return {
    type: 'INSERT_TASKS',
    tasks
  };
}
减速器是

   case 'INSERT_TASKS':
       state[0].flow.tasks = [];
       state[0].flow.tasks = action.tasks;
       return state;
我正在正确地传递action.type和action任务,并且似乎正在更新对象中的任务数组。但是这个代码感觉不正确

当我添加一个全新的流时,我的减速器是

case 'ADD_FLOW':   
            state = [];
            return [
              ...state, {
               // index: 1,
                flow : action.flow
              }
          ]
感觉好多了。
因此,我想我正在寻找在Redux中访问深度数组的最佳方法

您可以继续使用spread语法,深度可根据需要而定。例如:

var o = {
  foo: bar,
  baz: {
    id: 1,
    title: 'title',
    description: 'description'
  },
  bang: [1, 2, 3]
};
然后返回这个:

return {
  ...o,
  baz: {
    ...o.baz,
    description: 'new description'
  },
  bang: [...o.bang, 4, 5]
};
这将导致:

{
  foo: bar,
  baz: {
    id: 1,
    title: 'title',
    description: 'new description'
  },
  bang: [1, 2, 3, 4, 5]
}

您可以继续使用spread语法,深度可根据需要而定。例如:

var o = {
  foo: bar,
  baz: {
    id: 1,
    title: 'title',
    description: 'description'
  },
  bang: [1, 2, 3]
};
然后返回这个:

return {
  ...o,
  baz: {
    ...o.baz,
    description: 'new description'
  },
  bang: [...o.bang, 4, 5]
};
这将导致:

{
  foo: bar,
  baz: {
    id: 1,
    title: 'title',
    description: 'new description'
  },
  bang: [1, 2, 3, 4, 5]
}

您希望避免重新分配或变异减缩器中的任何内容。为了实现这一点,假设您的状态数组中只有一个项目,您可以执行以下操作:

case 'INSERT_TASKS':
  return [{
    ...state[0],
    tasks: actions.tasks,
  }];

spread(
)操作符在这里所做的是从
状态[0]
获取所有键,并使用当前处于
状态[0]的所有相同键创建一个新对象
之后,我们将用新的任务数组替换
任务
键。

您希望避免重新分配或更改还原器中的任何内容。为了实现这一点,假设您的状态数组中只有一个项目,您可以执行以下操作:

case 'INSERT_TASKS':
  return [{
    ...state[0],
    tasks: actions.tasks,
  }];

spread(
)操作符在这里所做的是从
状态[0]
获取所有键,并使用当前处于
状态[0]的所有相同键创建一个新对象
之后,我们将用新的任务数组替换
任务
键。

谢谢我需要多读一点wit spread运算符:-)谢谢我需要多读一点wit spread运算符:-)谢谢我需要多读一点wit spread运算符:-)使用库,否则你会发疯的。很多人会向FB推荐
Immutable.js
,但还有其他的,比如说,它非常好。使用一个库,否则你会发疯的。很多人会向FB推荐
Immutable.js
,但也有其他人,比如说,它很不错。