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})