我在React本机中有一个使用Text Input的搜索功能,但是搜索需要调用API,因此我想让onChangeText
在用户输入2秒钟后继续运行,
我尝试使用setInterval
或setTimeout
,但这些都不起作用,
这是我尝试过的代码:
<TextInput
placeholder="search"
onChangeText={(text) => {
setTimeout(() => {
console.log(text)
console.log("Kepanggil TimeOUTNYAA")
params.onSearchText(text)
}, 2000);
}
}
//function onSearchText
onSearchText(searchText){
this.setState({text:searchText},()=>{
this._loadMore() // here's a function to call the API
})
}
实际行为:
当我在am
中输入TextInput
时,显示我的日志:
预期行为:
我希望日志仅仅显示 am
,不显示 a
和am
有可能这样做吗?
答案 0 :(得分:0)
您应该清除旧的超时时间,然后再设置新的超时时间
<TextInput
placeholder="search"
onChangeText={(text) => {
if(this.searchWaiting)
clearTimeout(this.searchWaiting);
this.searchWaiting = setTimeout(() => {
this.searchWaiting = null;
console.log(text);
console.log("Kepanggil TimeOUTNYAA")
params.onSearchText(text)
}, 2000);
}}
/>
答案 1 :(得分:-1)
您根本无法在setTimeOut
上放置onChangeText
或任何类型的代码。它的回调函数意味着在事件触发后,您会收到一些text
在您的情况下无用的{会触发bcz事件,并在onSearchText
中调用API。)
您可以在onSearchText
函数中执行操作,您可以有条件地返回text
,例如如果文本长度大于2或3,则仅调用API
。就像这样:< / p>
onSearchText(searchText){
if(searchText.length > 3){
this.setState({text:searchText},()=>{
this._loadMore() // here's a function to call the API
})
}
}