在回调函数中获取状态错误?

时间:2018-06-13 07:19:17

标签: javascript reactjs callback setstate

最初我有状态变量url: ''

let data = this.state.content;
    ContractAction._generatePDF(data, function(data){
        let filename = data.filename;
        let accesstoken = localStorage.getItem('accessToken');
        this.setState({url : "http://172.104.16.14:1082/contracts/downloadpdf?filename=" + filename + "&access_token=" +accesstoken });

    });

在API调用之后,在回调中,我试图将url状态设置为给定的url 但它没有更新

我遇到状态Cannot read property 'state' of undefined的错误。

我希望将网址状态更改为http://172.104.16.14:1082/contracts/downloadpdf?filename=" + filename + "&access_token=" +accesstoken

1 个答案:

答案 0 :(得分:0)

因为this有范围问题。

你得到setState of undefined的原因是因为this在回调中未定义。因为它当前指向回调的实例而不是整个类本身。你应该更好地使用Arrow functions处理这些问题 -

  
      
  • 您无需继续输入功能
  •   
  • 它在词汇上抓住了这个
  • 的含义   
  • 它在词汇上捕捉了论证的含义
  •   

这样做

ContractAction._generatePDF(data, (data) => {
        let filename = data.filename;
        let accesstoken = localStorage.getItem('accessToken');
        this.setState({url : "http://172.104.16.14:1082/contracts/downloadpdf?filename=" + filename + "&access_token=" +accesstoken });
    });

或者只是将其定义为范围变量

let data = this.state.content;
let scope = this;

并使用

scope.setState({url : "http://172.104.16.14:1082/contracts/downloadpdf?filename=" + filename + "&access_token=" +accesstoken });