使用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
}
]
};
现在我想将response
和isCorrect
属性添加到操作'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调用将必要的数据登录到数据库。这是做事的预期方式吗?
答案 0 :(得分:3)
如何先复制你的州?
let newState = {...state};
然后像其他任何JS对象一样更新其中一个元素/值
newState.problems[2].response = 42;
然后你回来了?
return newState;
减速器只是一个功能,您不必立即返回。单行并非不可能,但可能无法读取(slice
,concat
,......)。