Javascript 在react中使用setTimeout进行轮询
为什么在这段代码中,它只运行了console.log“dostuff”两次Javascript 在react中使用setTimeout进行轮询,javascript,reactjs,Javascript,Reactjs,为什么在这段代码中,它只运行了console.log“dostuff”两次 class Something extends React.Component { componentDidMount() { this.doStuff(); } doStuff() { console.log('do stuff') setTimeout(this.doStuff, 3000); } render() {
class Something extends React.Component {
componentDidMount() {
this.doStuff();
}
doStuff() {
console.log('do stuff')
setTimeout(this.doStuff, 3000);
}
render() {
return null
}
}
第一次超时后,
此
将成为窗口
对象,并且您在窗口
对象上没有doStuff
方法,因此它不会再次运行
例如,您可以将doStuff
函数变成一个箭头函数,该函数将具有封闭词汇上下文的this
值
class.com组件{
componentDidMount(){
这是doStuff();
}
多斯塔夫=()=>{
log('do stuff');
setTimeout(this.doStuff,1000);
}
render(){
返回null;
}
}
ReactDOM.render(,document.getElementById('root'))代码>
在第一次超时后,此
将成为窗口
对象,并且您在窗口
对象上没有doStuff
方法,因此它将不会再次运行
例如,您可以将doStuff
函数变成一个箭头函数,该函数将具有封闭词汇上下文的this
值
class.com组件{
componentDidMount(){
这是doStuff();
}
多斯塔夫=()=>{
log('do stuff');
setTimeout(this.doStuff,1000);
}
render(){
返回null;
}
}
ReactDOM.render(,document.getElementById('root'))代码>
您的此
可能会丢失。可以尝试设置超时(this.doStuff.bind(this),3000)代码>?您的此
可能会丢失。可以尝试设置超时(this.doStuff.bind(this),3000)代码>?