私はいくつかのゲームのスコアを追跡することができる小さなアプリケーションに取り組んでいます。Re:どのようにthis.stateを後続のsetState()呼び出しで使用するのですか? this.stateへの更新を強制するには?
ゲームは2人のプレーヤーの間で行われます。プレイヤーはポイントを獲得できますが、ペナルティを被ることもあります。プレーヤーの得点からペナルティを差し引く代わりに、相手の得点に加算されます。相手も次のターンを取るべきです。
Iセットアップ上記の説明を実装デモ:https://codepen.io/anon/pen/ybLQvR
あなたはそれがかなりの仕事をしませんデモで見ることができるように:プレイヤーは、彼は代わりに相手の、ペナルティキックが与えられますペナルティを被るとき。
setState
setTurn
がすぐに処理されないためです。 setScore
は、まだターンが更新されていない「古い」状態を使用しています。
これは、以前に設定された状態を取るオブジェクト(コメント付きコードを参照)ではなく、setState
にコールバックを渡すことで処理できることがわかりました。私がそれをするならば、期待どおりに動作します。
しかし、setState
コールの外側のaddScore
には、状態の更新値(この場合はthis.state.turn
)が必要です。どうすればこれを達成できますか?私はthis.forceUpdate()
を無駄にしようとしました。
setState
コールバックにaddScore
の関数本体全体をラップする必要がありますか?それでは、addScore
メソッドからthis.state.turn
に基づく計算をどのように返す必要がありますか?
サイド質問:なぜthis.forceUpdate()
が機能しないのですか?状態キューを処理せずにコンポーネントを再描画するだけですか?
私を助けてくれてありがとう!
実際に現在の状態を変更してsetStateでコールバック関数を使用している場合は、行く良い方法 –
あなたのコメントのおかげで、@ CalallLinington。ですから、関数本体全体を 'setState'コールバックにラップすると、コールバック本体から' addScore'メソッド本体にどのような値を返しますか?プレイヤー1のスコアが50になったときに、「addScore」から値を返したいとしましょう。 – Meldon