this.setState不是函数rails

时间:2017-08-13 21:40:16

标签: javascript ajax reactjs

componentDidMount() {
    $.ajax({
        type: "GET",
        url: "/tweets",
        dataType: "json",
        success: function (data){
            //$('#tweetsList').append(data);
            this.setState({tweetsList: data});
        },
        error: function (error) {
            console.log(error);
        }
    });
}

上面的代码块给我一个this.setState函数找不到错误。我试图将我的推文控制器中的json渲染到我的main.jsx文件中。

2 个答案:

答案 0 :(得分:1)

ajax调用中this更改的上下文。 this不再引用您的组件。您需要参考原始上下文。

componentDidMount() {
    const self = this;
    $.ajax({
        type: "GET",
        url: "/tweets",
        dataType: "json",
        success: function (data){
            //$('#tweetsList').append(data);
            self.setState({tweetsList: data});
        },
        error: function (error) {
            console.log(error);
        }
    });
}

答案 1 :(得分:0)

问题是this您的成功回调函数是指该函数,因此没有任何setState方法。您可以将上下文传递给jQuery ajax调用,如下所示:

$.ajax({ type: "GET", url: "/tweets", dataType: "json", context: this, success: function (data){ //$('#tweetsList').append(data); this.setState({tweetsList: data}); }, error: function (error) { console.log(error); } });

有关详细信息,请参阅jQuery ajax docs有关上下文属性的内容。