当前位置: 首页 > 面试题库 >

仅当用户停止输入时才如何开始搜索?

刘焱
2023-03-14
问题内容

用户停止键入时需要执行搜索。我知道我应该使用 setTimeout() 。但是使用 Reactjs我找不到它是如何工作的。
有人可以告诉我当用户停止键入几秒钟(假设为5)时如何调用方法(将处理Search)。我不知道该在哪里编写代码来检查用户是否停止键入。

import React, {Component, PropTypes} from 'react';

export default class SearchBox extends Component {

    state={
      name:" ",
    }

    changeName = (event) => {
        this.setState({name: event.target.value}); 
    }

    sendToParent = () => {
        this.props.searching(this.state.name);
    }

    render() {
        return (
            <div>
                 <input type="text"  placeholder='Enter name you wish to Search.'  onChange={this.changeName} />

            </div>
        );
    }
}

我想在用户停止键入时调用sendToParent方法。


问题答案:

您可以setTimeout按照以下方式使用您的代码,

state = {
    name: '',
    typing: false,
    typingTimeout: 0
}
changeName = (event) => {
    const self = this;

    if (self.state.typingTimeout) {
       clearTimeout(self.state.typingTimeout);
    }

    self.setState({
       name: event.target.value,
       typing: false,
       typingTimeout: setTimeout(function () {
           self.sendToParent(self.state.name);
         }, 5000)
    });
}

另外,您需要changeName在构造函数中绑定处理程序函数。

constructor(props) {
   super(props);
   this.changeName = this.changeName.bind(this);
}


 类似资料:
  • null 所以我面临一个问题,如果打开,等待输入,如何停止它?我尝试过将它放在线程中并或使用作为标志,但它并没有停止

  • 简而言之:如何让UITextField框在用户第一次按键时移除所有内容?我不希望信息被删除,直到用户开始输入一些东西。即,在开始编辑时清除它是不够的。 长版本:我有三个UITextField循环(使用返回键并在“shouldReturn”方法中捕获按键。UITextField 中已有文本,如果用户未键入任何内容,而只是转到下一个 UITextField,则该值应保留(默认行为)。 但是我希望如果用

  • 默认行为是字段中的提示文本在字段被聚焦时被擦除。这是当标记在字段中时。 是否可以配置文本字段,以便仅在用户开始键入时删除提示文本? 否则,我需要在每个文本字段旁边/上方添加一个标签,以描述其中的值。

  • 嘿,我必须要求用户使用JOptionPane购买金额,如果他们输入超过两位小数点后,什么都没有,字符,或超过一个小数点,程序必须显示错误消息并停止。 我该怎么做? 我不希望有人为我写程序,只是一个链接,解释我将如何做 如果用户输入“12.526”或“1.3.25”或“abc”,我希望程序显示错误信息并停止。 因为这似乎是一个令人困惑的问题,或者我问得不正确,所以我的老师给出了正确的指导: 程序必须

  • 如果一项工作没有在10分钟内完成,在接下来的10分钟内另一项工作将开始。 我想要的是:下一个作业(每10分钟后)应该启动,只有在前一个作业已经完成运行的情况下。有什么办法可以做到吗?

  • 我在Windows 7笔记本电脑上运行Visual Studio 2015,每次我在IDE的调试器中启动应用程序时,都会出现以下异常: 在DLL“advapi32”中找不到名为“EventSetInformation”的入口点。动态链接库'。 我在github上的coreclr存储库中找到了对它的引用,表明这是一个添加到Windows 8中的API。我的情况与github问题类似,我可以单击“继续