Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 反应this.setState不是setTimeout内的函数_Javascript_Reactjs - Fatal编程技术网

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

Javascript 反应this.setState不是setTimeout内的函数,javascript,reactjs,Javascript,Reactjs,当前组件具有状态。断路器值为false。捕获滚动事件时,它会查看状态,如果其为false,则会执行一些操作 我希望在动作再次发生之前有某种静态延迟,这就是为什么在goTo功能中状态。断路器设置为true,将阻止当前方法下一次2s的进一步逻辑,直到setTimeout返回false 但在当前时刻,出现以下错误未捕获类型错误:当在setTimeout内部调用setState时,this.setState不是函数 class Slide extends Component { constructo

当前组件具有
状态。断路器
值为false。捕获滚动事件时,它会查看
状态
,如果其
为false
,则会执行一些操作

我希望在动作再次发生之前有某种静态延迟,这就是为什么在
goTo
功能中
状态。断路器
设置为
true
,将阻止当前方法下一次
2s
的进一步逻辑,直到
setTimeout
返回
false

但在当前时刻,出现以下错误未捕获类型错误:当在
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

}

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

setTimeout(() => {
  this.setState({breaker: false});
}, 2000)
请记住,匿名函数内部将包含上下文
窗口
,除非您显式地将其绑定到。所以这里有另一种解决这个问题的方法:

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

是的,谢谢!:)祝福之箭功能:)非常感谢你!