1
Reactでカウントダウンタイマーを作成しようとしています。私の理解は、componentDidMount
がrender
の直後に呼び出されることになっています。そのため、1秒遅れの後に現在の時刻でsetState
を呼び出すために使用することができます。これと同じように:componentDidMount
が呼び出されている間componentDidMountで状態が更新されていません
componentDidMount() {
setTimeout(this.setState({ now: this.getTime() }), 1000)
}
しかし、(私はconsole.log
でチェック)、状態が更新されていません。 componentDidMount
に状態を更新するには、どうすれば新しい時間でコンポーネントを再レンダリングできますか?ここで
は完全なクラスです:setTimeout
の
class Timer extends React.Component {
constructor() {
super();
this.state = {
now: this.getTime(),
end: this.getTime() + 180
}
}
getTime() {
return (Date.now()/1000)
}
formatTime() {
let remaining = this.state.end - this.state.now
let rawMinutes = (remaining/60) | 0
let rawSeconds = (remaining % 60) | 0
let minutes = rawMinutes < 10 ? "0" + rawMinutes : rawMinutes
let seconds = rawSeconds < 10 ? "0" + rawSeconds : rawSeconds
let time = minutes + ":" + seconds
return time
}
componentDidMount() {
setTimeout(this.setState({ now: this.getTime() }), 1000)
}
render() {
return(
<div id="countdown">
{ this.formatTime() }
</div>
)
}
}
関数を 'setTimeout'に渡す必要があります。今は 'this.setState()'(関数ではない)の場合には戻り値を渡しています。つまり、1000ms後ではなく、直ちに 'this.setState()'を呼び出しています。 –
[setTimeout()が重複している可能性があります](http://stackoverflow.com/q/15171266/218196) –