【发布时间】:2016-12-22 22:47:58
【问题描述】:
我想知道如何在 ReactJS 上使用setTimeout(),因为我正在这样做:
timerid = setTimeout( () => this.reqMaq( obj['fkmaqid'] ), 2000 )
它调用了两次函数this.reqMaq()。
如何防止第一次通话? 在时间之后继续通话?
这里是组件:
reqMaq (maqid) {
return fetch(`/scamp/index.php/batchprodpry/${maqid}`, {credentials: 'same-origin'})
.then(req => {
if (req.status >= 400) {
throw new Error("Bad response from server")
}
return req.json()
})
.then(json => this.processMaqReq(json))
.catch(function(error) {
console.log('request failed', error)
})
}
handleChangeMaq (event) {
event.preventDefault()
if (event.target.value.length > 0) {
let obj = this.state.obj
obj['fkmaqid'] = VMasker.toPattern(event.target.value, "99-99-99-99")
// if (timerid) {
// clearTimeout(timerid)
// }
// timerid = setTimeout(() => {
// if (!isRunning) {
// this.reqMaq(obj['fkmaqid'])
// }
// }, 2000)
const fx = () => this.reqMaq( obj['fkmaqid'] )
timerid = setTimeout( fx, 2000 )
this.setState({ obj: obj })
}
}
render() {
return (
<div className="form-group">
<label htmlFor="maquina">Máquina</label>
<input type="text" className="form-control" id="maquina"
name="maquina"
placeholder="Maquina"
value={this.state.obj['fkmaqid'] || ''}
onChange={this.handleChangeMaq}
ref={node => {
input1 = node
}}
required="required"
/>
</div>
)
}
谢谢。
【问题讨论】:
-
为什么会被调用两次?你在初始化时调用它吗?
-
肯定有其他的上下文;就其本身而言,这将在 2 秒后调用它一次。您是否在生命周期事件中这样做?
render方法?等等。 -
setTimeout在表单域上的onChange上被调用。你有什么建议?是因为这个吗? -
我不会在初始化时调用它。我打电话给
onChange -
您的问题不在于这段代码,而在于保存这段代码的方法以及调用该方法的任何其他代码。仅基于您在这里告诉我们的内容,最简单的解决方案是使用标志
isRunning,当您启动计时器时将其设置为true,当您的计时器结束时设置为false,并且不要除非isRunning为假,否则允许启动计时器
标签: javascript reactjs settimeout