从不同的范围访问“this”

时间:2015-09-25 00:30:38

标签: javascript scope reactjs

我试图使用React创建一个简单的评论系统。我在Parse中保存了评论。问题是,当我从Parse检索注释时,我需要更新组件的状态,但是当我尝试这样做时,我收到错误"Uncaught ReferenceError: this.setState is not defined"

无效代码

loadComments() {
    let Comment = Parse.Object.extend("Comment");
    let query = new Parse.Query(Comment);
    query.limit(15).find({
      success: function(result) {
        let data = [];
        for (var i = 0; i < result.length; i++) {
          var object = result[i];
          data.push(object.toJSON());
        }
        this.setState({ data: data });
      }
    });
}

如果我更改了我的代码,它会起作用,但我认为应该有更好的方法。

工作代码

loadComments() {
    let Comment = Parse.Object.extend("Comment");
    let query = new Parse.Query(Comment);
    let _this = this;
    query.limit(15).find({
        success: function(result) {
            let data = [];
            for (var i = 0; i < result.length; i++) {
            var object = result[i];
            data.push(object.toJSON());
            }
            _this.setState({ data: data });
        }
    });
}

1 个答案:

答案 0 :(得分:1)

您还有两个选择:

Function.prototype.bind

success: function (result) {
    // etc
}.bind(this)

arrow function(需要es6),它使用周围范围内的this

success: (result) => {
    // etc
}