当前位置: 首页 > 知识库问答 >
问题:

使用内部setTimeout Reactjs[duplicate]时,setState不是函数

鲁淇
2023-03-14

我们如何在setTimeout中使用setState。我在构造函数中声明了一个属性。我使用了this.setState({count:index})insidesetTimeout它会抛出一个类似于UncaughtTypeError的错误:this.setState不是一个函数

constructor(props) {
    super(props);
    this.state = {
      count: 0
    };
    this.onMouseDown = this.onMouseDown.bind(this);
  }
onMouseDown() {
    this.timer();
  }
timer() {
    for (var i = 1; i <= 90; i++) {
      (function(index) {
        setTimeout(function() {
          this.setState({ count: index });
        }, index * 10);
      })(i);
    }
  }

我试了很多,但不知道如何解决这个问题。为什么错了?请帮我解决这个问题。。

共有1个答案

左丘智渊
2023-03-14

不是指此组件。设置状态是在组件

 timer() {
    const objThis  = this; //store this.
        for (var i = 1; i <= 90; i++) {
          (function(index) {
            setTimeout(function() {
              objThis.setState({ count: index });
            }, index * 10);
          })(i);
        }
      }
 类似资料:
  • 我试图使用共享祖先在文件上传程序和表之间中继数据。我有一个文件上传程序,但一旦我添加了JSON文件,我就会收到错误TypeError:setProductState不是一个函数。 当我将inputJson文件记录到控制台中时,它会运行,但当我应用setProductState并输入我的文件时,我会收到此错误。 根据我所读到的,我不需要绑定,因为我使用箭头语法,但我可能需要一个“this”。 thi

  • 问题内容: 有人可以解释一下为什么 this.setState 不是函数吗? 我不明白为什么我的代码有错误 谢谢 问题答案: 这是问题。使用。

  • 我试图在lambda内部使用aws-sdk,但我似乎无法弄明白。 这就是我在lambda函数上所说的,但它给了我一个错误“Aws.ApigatewayManagementAPI不是一个构造函数at response”。在云表上。 我错过什么了吗?比如可能在lambda函数本身包含aws-sdk? 编辑:更新显示整个lambda函数

  • 问题内容: 我正在编写一个脚本,该脚本根据下拉列表的高度和输入在屏幕上的位置将下拉列表移动到输入下方或上方。我也想将修改器设置为根据其方向下拉。但是在内部使用会产生无限循环(这很明显) 我已经找到了使用和直接将classname设置为下拉列表的解决方案,但是我觉得应该使用React工具有更好的解决方案。有谁能够帮我? 这是工作代码的一部分(略微忽略了定位逻辑,以简化代码) 这是带有setstate

  • 当前组件的值为false。捕获scroll事件时,它会查看,如果它的,它会执行一些操作。 我希望在操作再次发生之前有某种静态延迟,这就是为什么在函数中,被设置为并将阻止下一个的当前方法的进一步逻辑,直到返回到。 但当前发生以下错误,未捕获TypeError:在内部调用时,This.SetState不是函数。