2016-12-09 24 views
1

Reactでカウントダウンタイマーを作成しようとしています。私の理解は、componentDidMountrenderの直後に呼び出されることになっています。そのため、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> 
     ) 
    } 
} 
+0

関数を 'setTimeout'に渡す必要があります。今は 'this.setState()'(関数ではない)の場合には戻り値を渡しています。つまり、1000ms後ではなく、直ちに 'this.setState()'を呼び出しています。 –

+1

[setTimeout()が重複している可能性があります](http://stackoverflow.com/q/15171266/218196) –

答えて

4

最初のパラメータはfunctionある - 何を渡していることfunctionではなく、その戻り値

この作品を作るために、あなたのsetStateを包むことができ

setTimeout(() => this.setState({ now: this.getTime() }), 1000) 
関連する問題