2

我正在尝试创建一个小的反应组件,但是,我无法设置状态。下面是我的代码。在_onChange函数中,我试图将一个长度为 10 的数组设置为 State 和console.log相同的值。我在控制台中得到一个空数组。

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

1 回答 1

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)
});
于 2016-08-20T05:51:23.953 回答