Javascript 请求后端输入更改数据的有效方法

Javascript 请求后端输入更改数据的有效方法,javascript,reactjs,redux-saga,Javascript,Reactjs,Redux Saga,这更像是一个提出问题的建议!我有一个搜索框,用户可以在其中键入内容,并从中获得建议列表。我使用react、axios进行数据获取,使用redux saga进行状态管理。基本上是这样的: handleChange(stringValue){ 这是我的国家({ inputValue:stringValue }); callServer(stringValue); } 现在,一切正常,但问题是,发送所有这些请求、处理传入响应和更改状态似乎没有必要,因为用户不会停下来查看他键入的每个字符中的建议。我正

这更像是一个提出问题的建议!我有一个搜索框,用户可以在其中键入内容,并从中获得建议列表。我使用react、axios进行数据获取,使用redux saga进行状态管理。基本上是这样的:

handleChange(stringValue){
这是我的国家({
inputValue:stringValue
});
callServer(stringValue);
}
现在,一切正常,但问题是,发送所有这些请求、处理传入响应和更改状态似乎没有必要,因为用户不会停下来查看他键入的每个字符中的建议。我正在寻找一种方法,只有当我知道用户已经完成快速键入时,才征求建议。我想做的事情如下所示:

handleChange(stringValue){
clearTimeOut(this.callerTimer);
this.callerTimer=null;
this.callerTimer=setTimeOut(函数(){
this.callServer(stringValue);
this.callerTimer=null;
}.绑定(此),300)
/我认为300毫秒是人们停止打字和思考的平均时间。
}

这很管用,但我感觉不太好。你们知道有没有其他干净、省时的方法来做我想做的事?有没有办法在我的saga效应中处理这个问题,或者在我不知道的输入中有一个内置的时间阈值呢?

我强烈建议使用lodash的
去盎司

从文档中:

创建一个取消公告的函数,该函数将延迟调用func,直到自上次调用取消公告的函数以来已过等待毫秒


因此,您将请求功能传递给
debounce
,因此您可以限制对服务器的请求数量。

您需要debounce功能

基本上,它限制了函数的启动速率。因此,它会在触发事件之前等待几毫秒,就像用户停止写入过程一样

检查此代码段

//返回一个函数,该函数只要继续被调用,就不会被调用
//被触发。函数停止调用后将被调用
//N毫秒。如果传递了'immediate',则在
//前缘,而不是后缘。
函数解盎司(函数、等待、立即){
var超时;
返回函数(){
var context=this,args=arguments;
var later=function(){
超时=空;
如果(!immediate)函数应用(上下文,参数);
};
var callNow=立即&&!超时;
clearTimeout(超时);
超时=设置超时(稍后,等待);
if(callNow)funct.apply(上下文,参数);
};
};
//这将对keyup事件应用去盎司效应
//在用户停止输入后,它只会触发500毫秒或半秒
$('#testInput')。在('keyup',去盎司(函数(){
警报(“发生键入”);
$('.content').text($(this.val());
}, 500));