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

反应一下。this.setstate不是setTimeout[duplicate]内的函数

卞博简
2023-03-14

当前组件的state.breaker值为false。捕获scroll事件时,它会查看state,如果它的false,它会执行一些操作。

我希望在操作再次发生之前有某种静态延迟,这就是为什么在goto函数中,状态。breaker被设置为true并将阻止下一个2s的当前方法的进一步逻辑,直到settimeout返回到false

但当前发生以下错误,未捕获TypeError:在SetTimeout内部调用SetState时,This.SetState不是函数。

class Slide extends Component {
  constructor(props) {
    super(props)

    this.state = {
      breaker: false
    }

    this.scrollRedirect = this.scrollRedirect.bind(this);
  }

  componentDidMount() {
    this.refs.holder.addEventListener('mousewheel', this.scrollRedirect);
  }


  scrollRedirect(e) {

    const path = this.props.location.pathname,
    goTo = (route) => {
      this.setState({breaker: true});
      hashHistory.push(route);

      setTimeout(function () {
        this.setState({breaker: false});
      }, 2000)
    };

    if (!this.state.breaker) {
       ... code that executes goTo on condition
    }
  }

  ... render code

}

共有1个答案

史意致
2023-03-14

你失去了上下文。使用箭头函数作为保留正确执行上下文的简单方法:

setTimeout(() => {
  this.setState({breaker: false});
}, 2000)

请记住,除非您用function.Prototype.bind显式绑定匿名函数,否则匿名函数内部将包含上下文window。所以这里有另一种解决这个问题的方法:

setTimeout(function () {
  this.setState({breaker: false});
}.bind(this), 2000)
 类似资料:
  • 问题内容: 当前组件的值为false。捕获滚动​​事件时,它会查看,如果有,它会做一些事情。 我想在动作再次发生之前有某种静态延迟,这就是为什么将内部函数设置为并将阻塞当前方法的进一步逻辑的原因,直到返回到。 但在当前时刻出现以下错误 遗漏的类型错误:this.setState不是一个函数 时被内部调用。 问题答案: 您正在失去上下文。使用箭头功能作为保留适当执行上下文的简单方法: 请记住,除非您

  • 问题内容: 我是React的新手,正在尝试编写使用API​​的应用程序。我不断收到此错误: TypeError:this.setState不是一个函数 当我尝试处理API响应时。我怀疑此绑定有问题,但我不知道如何解决它。这是我组件的代码: 问题答案: 回调是在不同的上下文中进行的。您需要这样做才能在回调内部进行访问: 编辑:看起来您必须同时绑定和调用:

  • 我们如何在setTimeout中使用。我在构造函数中声明了一个属性。我使用了inside它会抛出一个类似于 我试了很多,但不知道如何解决这个问题。为什么错了?请帮我解决这个问题。。

  • 问题内容: 我有以下组件,该组件维护在特定元素上触发事件时更新的状态,并且在更新状态时将其作为道具传递给另一个组件。我目前正在尝试为什么我得到以下错误“ this.setState不是函数”,它很可能没有绑定到正确的上下文。但是我不确定,我这样做正确吗? 编辑: 我只是意识到上下文会在“onreadyStateChange”函数时发生更改,所以我在searchGif中做了以下操作 问题答案: 您正

  • 我有以下组件,它维护当事件在特定元素上被激发时更新的状态,并且当状态被更新时,它将作为道具传递给另一个组件。我正在尝试为什么会出现以下错误“this.setstate is not a function”,它很可能没有绑定到正确的上下文。但我不确定这一点,我这样做对吗? 编辑:我刚刚意识到当“onreadystatechange”函数时上下文会发生变化,所以我在searchGif中做了以下操作

  • 对不起,我能看到这个问题本问了好几次。我以前解决过这个问题,但我知道我正在以一种新的方式看待它。 这是我在流量存储中的构造函数: 下面是我通过TodoActions.fuction子组件中的Name调用的一些函数: 我得到