如何在redux中修改对象属性?

时间:2018-02-02 14:30:18

标签: javascript reactjs redux

尝试创建一个非常简单的redux todo,几乎就在那里,但却陷入了困境。

export const completeTodo = (todo) => ({
  type: 'COMPLETE_TODO',
  data: {
    name: todo,
    complete: !todo.complete
  }
})

但是,努力让减速器工作,因为我无法确定如何确定我正在使用的确切对象

减速器:

case 'COMPLETE_TODO': {
   const chore = { ...state.chores, complete: action.data.complete}
   return { ...state.chores, chore };
}

和initialState是:

const initialState = {
  chores: [{name: 'cleaning', complete: false}]
}

显然,当我点击我的按钮时,应该连线,这样它可以将完整的布尔值更改为相反但仅适用于那个todo

1 个答案:

答案 0 :(得分:1)

由于您有阵列,因此需要将其替换为新阵列

case 'COMPLETE_TODO': {
      return {
        ...state,
        chores: state.chores.map(chore => 
         chore.name === action.data.name
         ? {...chore, complete: true /* or !chore.complete if you want toggle like behaviour*/}
         : chore)
      };
    }

并在您的动作创建者中

export const completeTodo = (todo) => ({
  type: 'COMPLETE_TODO',
  data: {
    name: todo.name // assumning names are unique
  }
})