2016-08-20 35 views
2

反応成分を小さくしようとしていますが、状態を設定できません。以下は私のコードです。 _onChange関数では、長さ10の配列をStateに、そしてconsole.logの配列を同じに設定しようとしています。私はコンソールに空の配列を取得しています。反応のsetStateが反応成分で機能していない

var Home = React.createClass({ 
 

 
    getInitialState: function() { 
 
     return ({ 
 
      reviewData: [] 
 
     }); 
 
    }, 
 

 
    componentWillMount: function() { 
 
     ReviewStore.addChangeListener(this._onChange); 
 
     ReviewAction.getRatings(); 
 
     console.log(this.state.reviewData); 
 
    }, 
 

 
    _onChange: function() { 
 
     var res = ReviewStore.getRating(); 
 
     console.log(res); //Here I am getting array of length 10 
 
     this.setState({reviewData: ReviewStore.getRating()}); 
 
     console.log(this.state.reviewData); //Here I am getting array of length 0 
 
    }, 
 

 
    componentWillUnmount: function() { 
 
     ReviewStore.removeChangeListener(this._onChange); 
 
    }, 
 

 
    ratingChanged : function(newRating) { 
 
     console.log(newRating) 
 
    }, 
 

 
    render: function() { 
 
     return(
 
      <div> 
 
       <h2>Rating of Arlo Smart Home 1 HD Camera</h2> 
 
       <hr/> 
 
       <h4>Average Rating: </h4><ReactStars half={false} onChange={this.ratingChanged} size={24}/> 
 
      </div> 
 
     ) 
 
    } 
 
});

答えて

4

setState非同期です。値はすぐに設定されません。新しい状態が設定されたときに呼び出されるsetStateにコールバックを渡すことができます。

からは、ドキュメントhttps://facebook.github.io/react/docs/component-api.html

setState()を反応させ、直ちにthis.state変異させるが、保留状態遷移を作成しません。このメソッドを呼び出した後this.stateにアクセスすると、潜在的に既存の値が返される可能性があります。

あなたはあなたのコードを変更することができます

this.setState({reviewData: ReviewStore.getRating()}, function() { 
    console.log(this.state.reviewData) 
}); 
関連する問題