2017-10-31 7 views
0

setTimeoutメソッドを使用してループ内の状態を変更しようとしています。私は問題が別の5秒後で、このsetTimeoutを連続的に使用して状態をreactjsで変更する

setTimeout(() => { 
      this.setState({ 
       postType: 'image_poll' 
      }); 
     }, 5000); 

のように達成することができました5秒で状態を変更したいこの

constructor(){ 
     super(); 

     this.state = { 

      postType:'star_rating' 

     } 

    } 

のように私のコンストラクタでデフォルトの状態を宣言していることそれを別の状態に変更する必要があります。さらに5秒後、最初から状態の変更を繰り返す必要があります。 だから、結論に状態がこの

Aのように変更する必要があります - 継続的にこれが起こるはず.......> C - > B - > C - > A - > B - > C - > A - > B 。これどうやってするの?

+2

は、アレイとカウンタを使用しますか? > 2のときにカウンタをリセットしますか? – mplungjan

+1

アクションを繰り返し実行する必要がある場合は、setInterval https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setIntervalを検討してください。現在の状態を読み取って、各インターバルに移行する対象を決定することができます。 – John

+0

@mplungjanあなたはどうすれば私を見せてくれますか? – CraZyDroiD

答えて

2

これは単純な状態マシンです。これは、1つの可能な実装です:

setTimeout(() => { 
    this.setState(getNextState()); 
}, 5000); 

getNextState() { 
    if (this.state.postType === 'star_rating') 
    return { postType: 'image_poll' }; 
    if (this.state.postType === 'image_poll') 
    return { postType: 'third_state' }; 
    return { postType: 'star_rating' }; 
} 
関連する問題