2017-10-05 12 views
1

React/Reduxを使用すると、ユーザーはいくつかの選択肢からのプロンプトに応答し、応答を記録し、正しいかどうかを簡単な反応ゲームで知ることができます。私はredux状態の配列(オブジェクト)要素へのアクセス方法

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 
     } 
    ] 
    }; 

よう'GAME_BEGIN'減速を持っているそして今、私は、問題の配列に新しい問題を追加し、アクション'GAME_SUBMIT_RESPONSE'上の最初の問題のオブジェクトにresponseisCorrect属性を追加します。だから、数回の反復(多くの問題がある可能)の後に、私は状態は、私はちょうど全体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 
    } 
] 

のようになります考えていますが、どのように一回程度、私は新しい追加しましたオブジェクト?

または私は間違った方法でこれについて考えています。私はまた、状態を平坦化してproblems配列を完全に取り除いて、api呼び出しによってDBに必要なデータを提出しログオンする際に問題をリセットすることもできると考えました。これは目的を達成するための意図された方法ですか?その後、あなたはそれを返すどのような最初の

let newState = {...state}; 

あなたの状態をコピーについて、あなたは他のJSオブジェクトなどの要素/値

newState.problems[2].response = 42; 

のいずれかを更新

+0

あなたのやりたいことははっきりしません。前の質問に対する答えが必要ですか?一般的に、ストアはアプリケーションの状態を表し、その状態を選択します。オブジェクトを配列に追加する必要がある場合や、要素の1つを変更する場合は、通常のjavascriptオブジェクトと同様に動作します。 – JulienD

+0

Hmmm、私はそう思っていましたが、例えば、 'GAME_SUBMIT_RESPONSE'減速機の' state、problem.problems [state.problems.length - 1] .response:action.response'が機能しない、エラーが発生します。私はすべての応答で 'problem'配列全体を書き直すことができますが、多くの質問に答えると大きくなるでしょう。 – TrivialCase

答えて

3

return newState; 

還元剤は単なる機能であり、すぐに戻る必要はありません。 1ライナーは不可能ではありませんが、おそらく判読不能です(sliceconcat、...)。

+0

* sigh *私はばかです、これはおそらく私が考慮すべき最初のものです...ありがとう! – TrivialCase

関連する問題