Reactjs 如何在redux状态下访问数组(对象)元素

Reactjs 如何在redux状态下访问数组(对象)元素,reactjs,redux,Reactjs,Redux,使用React/Redux,我有一个简单的React游戏,其中用户响应来自多个选项的提示,我想记录响应以及它是否正确。我有一个“游戏开始” case 'GAME_BEGIN': return { ...state, timeRemaining: action.timeRemaining, gameIsInProgress: true, problems: [ { problem: action.problem, // string

使用React/Redux,我有一个简单的React游戏,其中用户响应来自多个选项的提示,我想记录响应以及它是否正确。我有一个
“游戏开始”

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
      }
    ]
  };
现在我想为action上的第一个问题对象添加
response
isCorrect
属性
“GAME\u SUBMIT\u response”
,然后向problems数组添加一个新问题。所以经过几次迭代(可能会有很多问题),我认为状态应该是这样的

...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
  }
]
对于第一个问题,我可能只需重写整个
问题
数组就可以添加属性,但一旦添加新对象又如何


还是我想的不对。我还认为我可以将状态平坦化,完全消除
问题
数组,在每次提交时重置问题,并通过api调用将必要的数据记录到DB中。这是你想要的做事方式吗?

先复制你的状态怎么样

let newState = {...state};
然后像任何其他JS对象一样更新其中一个元素/值

newState.problems[2].response = 42;
那你还吗

return newState;

减速机只是一个函数,您不必立即返回。一行代码并非不可能,但很可能不可读(
slice
concat
,…)。

不清楚您要做什么。你需要前面问题的答案吗?通常,存储区表示应用程序的状态,您可以选择该状态。如果您需要向数组中添加一个对象,或者对其中一个元素进行变异,它的工作原理与任何常见的javascript对象一样。嗯,我也这么认为,但例如,返回
…state,state.problems[state.problems.length-1]。响应:action.response
游戏中提交\u response
reducer不起作用,我只是得到一个错误。我可以在每个回答中重写整个
问题
数组,但如果他们回答了很多问题,那就太大了。唉,我是个白痴,这可能是我应该考虑的第一件事。。。谢谢