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

反应 this.setState不是setTimeout内部的函数

朱高丽
2023-03-14
问题内容

当前组件的state.breaker值为false。捕获滚动​​事件时,它会查看,state如果有,它false会做一些事情。

我想在动作再次发生之前有某种静态延迟,这就是为什么将内部goTo函数state.breaker设置为true并将阻塞当前方法的进一步逻辑的原因,2s直到setTimeout返回到false

但在当前时刻出现以下错误 遗漏的类型错误:this.setState不是一个函数setState被内部调用setTimeout

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

}

问题答案:

您正在失去上下文。使用箭头功能作为保留适当执行上下文的简单方法:

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

请记住window,除非您将匿名函数与Function.prototype.bind明确绑定,否则匿名函数将在内部具有上下文。因此,这是解决此问题的另一种方法:

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


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

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

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

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

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

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