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)
是的,谢谢!:)祝福之箭功能:)非常感谢你!