这是我的编辑reducer。它工作正常,但我想使用object.assign方法

时间:2019-03-22 07:04:24

标签: reactjs redux react-redux

这是我的简化器,当待办事项ID与有效载荷的ID匹配时,它会更改值,但我想使用object.assign metod。

case EDIT_TODO:

  return state.map(todo => {
    if(todo.id === action.payload.id){
        return {
          ...todo,
         text: action.payload.text
        }
      }
      return todo;
    });

2 个答案:

答案 0 :(得分:0)

在上面的代码中,由于Map返回了一个新数组,所以您并没有改变状态,并且对于匹配的id,您正在关闭对象并对其进行更新。

唯一的事情是另一个todo对象仍然拥有相同的引用,但这很好。

即使text是一个对象,您当前正在为其分配新的引用,并且如果要合并,则可以使用传播语法,但从命名约定看来text看来成为string,即javascript是Immutable

case EDIT_TODO:

  return state.map(todo => {
    if(todo.id === action.payload.id){
        return {
          ...todo,
         text: action.payload.text
        }
      }
      return todo;
    });

答案 1 :(得分:0)

首先,正如另一个响应所指出的那样,您没有使用扩展语法对任何东西进行变异(您将返回一个新对象)。

如果您想通过@Controller实现相同的目标,则可以执行以下操作:

Object.assign

此行:

case EDIT_TODO:
      return state.map(todo => {
        if(todo.id === action.payload.id){
            return Object.assign({}, todo, text)
          }
          return todo;
        });

说“创建一个新的空对象(第一个参数),并将以下属性分配给该空对象:待办事项,文本(其余参数)”