GameコンポーネントのgameIdをその状態で管理するコンテナコンポーネントがあります。 ゲームの最後に、ユーザーはスコアを取得します。 ユーザーはplayAgainをヒットし、totalScoreを合計するにはuserScoreを追加します。トップコンポーネントのコンテナの状態を変更するにはReact:ゲーム中の合計を維持する方法
を更新
、私は機能でこれを結合して、フッターにそれを送信する必要があります。 私は、この関数を呼び出すと、エラーが
コード "のrender()内の状態を変更しない" しまっしようとしていた前に:
class Container extends React.Component {
constructor(props) {
super(props);
this.state = {
gameId:1,
...
totalScore:0
};
}
addToTotalScore(val){
this.setState({ totalScore: this.state.totalScore + val });
}
.....
render(){
return (
<div>
<Game
key={this.state.gameId}
...
addToTotalScore={this.addToTotalScore.bind(this)}
/>
</div>
);
}
}
そしてゲーム:
class Game extends React.Component {
....
finishGame(gameState) {
let completedTime = this.secondsRemaining;
let userScore = 0;
if (gameState === "won"){
let wrongGuesses = 3 - this.state.wrongGuesses.length;
userScore = wrongGuesses < 1? 1: wrongGuesses;
}
// want to change the userScore and update the totalScore here
this.setState({ userScore: userScore });
this.props.addToTotalScore(this.props.userScore);
});
clearInterval(this.playTimerId);
return gameState;
}
私がこれを解決するためにしたのは、変数を作成してゲームの状態を設定し、props.userStateを呼び出して合計を更新するのではなく、同じ変数を使用することでした。これにより、予想通りの合計数が更新されました。 finishGameで
:
...
let wrongGuesses = 3 - this.state.wrongGuesses.length;
let _userScore = wrongGuesses < 1? 1: wrongGuesses;
this.setState({userScore: _userScore});
this.props.addToTotalScore(_userScore);
「ここでそれを呼び出すことは、render()内で状態を設定することの問題ですか?レンダリングメソッドで状態内でどこを更新するのかわからないので、 –
あなたの問題が何であるか分かりませんが、レンダリングメソッドのどこかにあなたの状態を設定している場合は、そのことを行うべきではありません – Jayce444