代码之家  ›  专栏  ›  技术社区  ›  The Walrus

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

  •  0
  • The Walrus  · 技术社区  · 7 年前

    试图创建一个非常简单的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 };
    }
    

    初始状态为:

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

    显然,当我点击我的按钮时,它应该被连接起来,这样它就可以将完整的布尔值更改为相反的值,但只针对要做的那一个

    1 回复  |  直到 7 年前
        1
  •  1
  •   Yury Tarabanko    7 年前

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

    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
      }
    })