Bitte beachten Sie: Dies ist kein Duplikat ReactJS - Need to click twice to set State and run function. Die Lösung dort funktioniert nicht für mich.ReactJS: eine Timer-Funktion auf die Schaltfläche Anruf klicken
Dies ist meine erste state
:
constructor(props) {
super(props)
this.state = {
/* some code */
game: { // game-level
/* some code */
/* value options: 'ready' 'in-progress', 'paused', 'cleared' */
status: 'ready'
},
} /* END state */
} /* END constructor */
Ich versuche this.state.game.status
-in-progress
auf die Schaltfläche klicken, um zu ändern, und wenn es geändert wird, ich möchte einen Timer starten.
Der Knopf innen render()
:
<RaisedButton label="Start" primary={true}
onClick={()=> this.changeGameStatus('in-progress')} />
Die Funktion, die auf Tastenklick aufgerufen wird:
changeGameStatus = (status) => {
console.log('status = ' + status)
this.setState({
game: {
status: status
}
})
console.log('new status:' + this.state.game.status)
this.startTimer()
}
Die startTimer()
Funktion
startTimer() {
if (this.state.game.status === 'in-progress') {
console.log('The timer has started')
this.timerID = setInterval(
() => this.updateTimer(),
1000
)
}
} /* END startTimer */
Das Problem ist, this.state.game.status
wird beim ersten Klicken auf die Schaltfläche nicht aktualisiert und daher startet der Timer nicht. Ich musste zweimal auf den Knopf klicken, damit das Ganze funktionierte, was nicht sehr ratsam ist.
HINWEIS:
Es gibt eine Antwort auf die andere Frage, die ich oben erwähnt, aber es gibt an, dass ich die Funktion innerhalb componentWillUpdate()
nennen. Es funktioniert nicht für mich, weil es die startTimer()
mit jedem Tick anruft, wodurch der Timer jedes Mal doppelt so schnell ausgeführt wird.
Wie kann ich meinen Status aktualisieren und die Timer-Funktion mit einem einzigen Klick aufrufen? Ich denke, das ist einfach, aber ich bin neu bei ReactJS, also habe ich keine Ahnung, wie ich es im Moment machen soll. Vielen Dank.
Also das ist, was es heißt ... ein 'Callback'. Ich habe die Syntax schon mehrmals getroffen, konnte sie aber vorher nicht verstehen. Vielen Dank! Dies löst mein Problem. – ITWitch
Ja, es wurde ein Rückruf aufgerufen, und Sie benötigen ihn immer dann, wenn Sie im aktualisierten Status asynchrone Aktionen ausführen. –
Könnten Sie das als Antwort akzeptieren, wenn es geholfen hat? –