【问题标题】:In call back Function getting state error? [duplicate]在回调函数中获取状态错误? [复制]
【发布时间】:2018-06-13 07:19:17
【问题描述】:

最初我有状态变量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 的错误。

我想把url状态改成http://172.104.16.14:1082/contracts/downloadpdf?filename=" + filename + "&access_token=" +accesstoken

【问题讨论】:

  • 能否显示完整代码,因为使用此代码,您应该会收到另一条错误消息“无法读取未定义的属性 setState”。
  • 某种意义上的完整代码,您还需要什么我正在调用 API,因为我正在使用172.104.16.14:1082 等中的 URL 设置状态 url...
  • 执行此代码的函数,以及调用该函数的方式。

标签: javascript reactjs callback setstate


【解决方案1】:

因为this 存在范围问题。

之所以得到setState of undefined,是因为this 在回调中未定义。因为它当前指向回调的实例而不是整个类本身。你最好用Arrow functions来处理这些事情——

  • 你不需要一直打字功能
  • 它在词法上捕捉了 this 的含义
  • 它在词法上捕获参数的含义

这样做

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

【讨论】:

  • 我可以知道有什么区别两者都相似,但以前的不工作这是工作
  • @user9883888,如果你注意到我在这里使用了(data) => { 而不是function(data)。这是打字稿中的arrow/lambda 函数。查看更新的答案,您就会明白我在说什么。
猜你喜欢
  • 2013-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 2015-03-26
  • 2020-12-12
  • 1970-01-01
相关资源
最近更新 更多