当前位置: 首页 > 面试题库 >

TypeError:无法读取未定义的属性“ setState”

阎乐池
2023-03-14
问题内容

我试图在ajax回调从REST api接收数据后设置组件的setState。这是我的组件构造函数代码

constructor(props) {
    super(props);
    this.state = { posts: [] };
    this.getPosts = this.getPosts.bind(this);
}

然后,我有一个componentDidMount如下所示的方法。

componentDidMount() {
        this.getPosts();
}

现在,这是我执行getAJAX请求的getPosts函数。

getPosts = () =>  {
    $.ajax({
        type: 'get',
        url: urlname,
        success: function(data) {
            this.setState( { posts: data } )
        }
    });
}

我想设置状态,但出现以下错误。

this.setState is not a function

不太清楚是什么原因造成的。如果有人指出我正确的方向,那将真的很有帮助。提前致谢。


问题答案:

还绑定回调函数,以便this回调内部指向React Component的上下文,而不是回调函数

getPosts = () =>  {
    $.ajax({
        type: 'get',
        url: urlname,
        success: (data) => {
            this.setState( { posts: data } )
        }
    });
}

或者你可以像这样使用bind

getPosts = () =>  {
    $.ajax({
        type: 'get',
        url: urlname,
        success: function(data) {
            this.setState({ posts: data })
        }.bind(this)
    });
}


 类似资料:
  • 如果函数在组件中,那么一切都很好。如果我把它单独取出并导出到一个组件中,那么我会得到一个错误TypeError:不能读取未定义的属性(读取'reduce')

  • 我试图使用node.js express web服务器中的@tensorflow/tfjs-node模块。但是,我得到了下面的错误。我不明白为什么我会出现这个错误。我刚刚在node.js服务器中添加了1行代码。我使用“npm install@tensorflow/tfjs-node”完成的安装。可能的问题是什么? null 先谢谢你, var nonMaxSuppressionV3Impl=tf.

  • 我正在尝试联系许多对许多,在两个模式“培训和培训课程”,所以我做了第三个模式“课程”,以尝试关系1对许多。但是我得到了一个错误: null TypeError:无法读取对象上未定义得属性“belongsto”。(c:UsersDellDownloadsGraphql-12.18.2020Graphql-12.18.2020Graphql-12.18.2020ServerAppDatabaseDat

  • 上面的函数返回一个类似“failed”的字符串。但是,当我尝试在其上运行then函数时,它将返回 并且光标指示在之后和。 下面是完整的功能: 更新 下面是函数 我确信将导致一个“failed”字符串。没别的了。

  • 无法显示Barchart。 我有一个包含数据的表,它是可拖动的。在表格旁边我有一个两个dropbox被拖动的表格中的数据可以被拖动到框中。当将数据拖动到框中时,应该会显示条形图。 这是我的家。component.html 这是我的家。Component.TS 这是我的酒吧 在拖放数据时,特定的图表必须显示在Dropbox上。

  • 我被困在这个错误上:类型错误:无法读取未定义的属性'getText'当我在量角器v.4.0.14中运行我的测试时,我所理解的是getText()无法从表单元格中获取文本,因为CSS选择器没有正确地选择它,或者我使用错误的方法从单元格检索文本?! 我的页面对象文件的代码: 以下是规范文件的代码: 这是一条错误消息: 失败:1)通讯录应能够搜索保存的联系人消息:失败:无法读取未定义堆栈的属性“getT