ReactJs:获取无法读取未定义错误的属性“setState”[重复]

Posted

技术标签:

【中文标题】ReactJs:获取无法读取未定义错误的属性“setState”[重复]【英文标题】:ReactJs: Getting cannot read property 'setState' of undefined error [duplicate] 【发布时间】:2018-07-25 20:38:29 【问题描述】:

我正在使用带有 React 的 axios 进行 webservice get 调用,然后使用以下代码设置状态:

handleRefreshOrgs(e) 
    let curComponent = this;
    axios.get("/api/org").then((res) => 
        let result = JSON.parse(res.data[0]).result;
        curComponent.setState(
            scratchOrgs: result.scratchOrgs,
            nonScratchOrgs: result.nonScratchOrgs
        )
    );

我现在尝试了多种方法来解决这个问题。但是,我尝试过的方法都没有奏效。我尝试使用箭头函数和 bind() 声明一个新变量。但他们都没有工作。

我现在很沮丧。我应该如何解决这个问题?

【问题讨论】:

为什么这样:` let curComponent = this;;You are using arrow function, you can use this.setState`。这不适合你吗? 用粗箭头函数定义handleRefreshOrgs或将其绑定到类实例。 @Ved 我以前试过。它不适合我。否则我不会使用 let 的东西 你绑定handleRefreshOrgs like: this.handleRefreshOrgs = this.handleRefreshOrgs.bind(this) inside constructor? 需要绑定handleRefreshOrgs 【参考方案1】:

您似乎没有将您的handleRefreshOrgs 绑定到this

class classname extends React.Component 
    constructor()

    this.handleRefreshOrgs = this.handleRefreshOrgs.bind(this)
  
    

参考此文档:https://medium.freecodecamp.org/react-binding-patterns-5-approaches-for-handling-this-92c651b5af56

【讨论】:

【参考方案2】:

您的语法看起来是正确的。您需要将其绑定到类。这就是你将它绑定到类的方式。这是documentation 和代码:

class yourComponent extends React.Component 
constructor()
//bind in the constructor
this.handleRefreshOrgs = this.handleRefreshOrgs.bind(this)
  

【讨论】:

以上是关于ReactJs:获取无法读取未定义错误的属性“setState”[重复]的主要内容,如果未能解决你的问题,请参考以下文章

错误:无法在 reactjs 项目中读取未定义的属性(读取“地图”)\

如何解决“未捕获的类型错误:无法读取未定义的属性'参数'”reactjs + django

TypeError:无法读取reactjs中未定义的属性“长度”

ReactJS TypeError:无法读取未定义的属性“setState”[重复]

ReactJS TypeError:无法读取未定义的属性(读取'main')

ReactJS:TypeError:无法读取未定义的属性“纬度”