最初我有状态变量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
答案 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 });