javascript - 从不同范围访问 "this"

标签 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 });
        }
    });
}

最佳答案

您还有另外两个选择:

Function.prototype.bind :

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

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

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

关于javascript - 从不同范围访问 "this",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32773027/

相关文章:

javascript - 如何使用 Redux 和 React-router 将路由拆分到不同的文件?

css - 如何粘贴可滚动内容的标题,以及当内容超过标题时也应该滚动,然后发生下一个滚动内容

javascript - IE 和未指定的错误和在 IE8 对象不支持方法

javascript - 为什么我的 setState 会导致无限循环?

javascript - 在Javascript中的分页数字之间添加点

javascript - 陷入 javascript 闭包范围的困境,直到我的大脑变成了炒鸡蛋

function - golang中变量的范围

javascript - 当第二个 observable 发生变化时,combineLatest 没有发射?

ruby - 您是否曾在任何 Ruby 代码中使用过 "class instance variable"?

reactjs - React 将一个对象传递给路由