避免使用额外的变量来存储es6中的引用

时间:2017-04-10 04:01:24

标签: javascript reactjs ecmascript-6

我已经在使用react es6,但在这种情况下,我不知道如何避免将其用于this

const that = this;

UploadApi.exec(file).then(data => {
    that.setState({ loading : false});
});

2 个答案:

答案 0 :(得分:7)

在此示例中,您已使用arrow function,因此不需要将reference存储在单独的变量中。您可以直接使用this这样的关键字:

//const that = this;

UploadApi.exec(file).then(data => {
    this.setState({ loading : false});
});

当您使用reference时,将callback method存储在所需的单独变量中:

const that = this;

UploadApi.exec(file).then(function(data){
    that.setState({ loading : false});
});

但是,您可以使用.bind(this) callback method来避免额外变量,如下所示:

//const that = this;

UploadApi.exec(file).then(function(data){
    this.setState({ loading : false});
}.bind(this));

检查此答案以获取完整的详细信息, arrow function vs function declaration

答案 1 :(得分:0)

你需要以这种方式创建你的UploadApi.exec,以便在转换后你的javascript得到相应的创建。如下所示

在您的UploadApi

exec=(file:any):Q.Promise=>{

}

然后像下面那样使用它

UploadApi.exec(file).then(data => {
    this.setState({ loading : false});
});