Javascript 检测React搜索组件中的活动类型
标题几乎说明了一切。到目前为止,我能想到的最好方法是在搜索栏组件上创建这个Javascript 检测React搜索组件中的活动类型,javascript,reactjs,dom-events,Javascript,Reactjs,Dom Events,标题几乎说明了一切。到目前为止,我能想到的最好方法是在搜索栏组件上创建这个isTyping方法,如下所示: isTyping = debounce(() => { console.log('typing...'); const callback = () => window.setTimeout(() => this.setState({ typing: false }), 500); this.setState({ typing: true },
isTyping
方法,如下所示:
isTyping = debounce(() => {
console.log('typing...');
const callback = () => window.setTimeout(() => this.setState({ typing: false }), 500);
this.setState({ typing: true }, callback);
}, 500)
我从搜索输入文本组件上的
onChange
事件处理程序调用此方法。但它不起作用。由于某种原因,日志类型“键入”在停止键入之后发生,并且函数没有像我希望的那样在调用中间将打字状态设置为true。
<div className="fancysearch">
<TextInput
ref = "input"
type = "text"
name = "query"
placeholder = { placeholder }
label = ""
className = "form-control"
defaultValue = { query }
onChange = {this.isTyping}
/>
<b></b>
</div>
“出于某种原因,日志‘键入’会在我停止键入后继续出现”-debounce在函数在指定时间内未被调用后不应该执行某些操作吗?如果函数在x秒前被调用,debounce不应该调用该函数。因此,日志应该在输入开始时触发一次,而不是在输入之后触发,因为它正在被解除公告。我不知道您的解除公告的实现,但是您描述的行为可能取决于immediate
参数设置为true
——至少在使用lodash debounce搜索web.hm时出现的实现中是这样的,我认为不需要立即参数:“[options.leading=false](布尔值):指定在超时的前沿调用。“。因此,isTyping=uu.debounce(()=>{…},500,{leading:true})
“出于某种原因,日志'键入'在我停止键入后一直发生”-debounce的想法不是在函数在指定的时间内没有被调用后执行某些操作吗?如果函数在x秒之前被调用,debounce不应该调用该函数。因此,日志应该在输入开始时触发一次,而不是在输入之后触发,因为它正在被解除公告。我不知道您的解除公告的实现,但是您描述的行为可能取决于immediate
参数设置为true
——至少在使用lodash debounce搜索web.hm时出现的实现中是这样的,我认为不需要立即参数:“[options.leading=false](布尔值):指定在超时的前沿调用。“。所以isTyping=..debounce(()=>{…},500,{leading:true})