如何访问redux状态中的数组(对象)元素

时间:2017-10-05 13:29:44

标签: reactjs redux

使用React / Redux,我有一个简单的反应游戏,用户响应来自多个选项的提示,我想记录响应以及是否正确。我有一个'GAME_BEGIN'缩减器,如

case 'GAME_BEGIN':
  return {
    ...state,
    timeRemaining: action.timeRemaining,
    gameIsInProgress: true,
    problems: [
      {
        problem: action.problem, // string
        solution: action.solution, // string
        incorrectResponses: action.incorrectResponses, // array of strings
      }
    ]
  };

现在我想将responseisCorrect属性添加到操作'GAME_SUBMIT_RESPONSE'上的第一个问题对象,然后向问题数组添加一个新问题。所以经过几次迭代(可能会出现很多问题)后,我认为状态看起来应该是

...state,
problems: [
  {
    problem: something, // string
    solution: something, // string
    incorrectResponses: something, // array of strings
    response: something,
    isCorrect: somethingBool
  },
  ...
  {
    problem: action.problem, // string
    solution: action.solution, // string
    incorrectResponses: action.incorrectResponses, // array of strings
  }
]

对于第一个问题,我可以通过重写整个problems数组来添加属性,但是一旦添加新对象怎么样?

或者我是以错误的方式思考这个问题。我还认为我可以完全消除状态并完全摆脱problems数组,重置每次提交时的问题,并通过api调用将必要的数据登录到数据库。这是做事的预期方式吗?

1 个答案:

答案 0 :(得分:3)

如何先复制你的州?

let newState = {...state};

然后像其他任何JS对象一样更新其中一个元素/值

newState.problems[2].response = 42;

然后你回来了?

return newState;

减速器只是一个功能,您不必立即返回。单行并非不可能,但可能无法读取(sliceconcat,......)。