【发布时间】:2019-03-10 21:57:56
【问题描述】:
我需要在用户输入上实现标签搜索,但输入速度很快,我不想为用户输入的每个符号触发 DB 调用,所以我是古玩,有没有一种简单的好方法来消除 api 调用让我们比如说 - 延迟 3 秒后一次?
现在我想出了这个:
let searchDelay
async function handleTagSearch(e) {
clearTimeout(searchDelay)
tagSearchPhraseSet(e.target.value)
searchDelay = setTimeout(async () => {
if (e.target.value.length > 3) {
let res = await fetch('api/tag_seatch/' + e.target.value)
res = await res.json()
console.log(res)
}
}, 3000)
}
但这是正确的方法吗?
【问题讨论】:
-
看起来是一个可行的解决方案。它在您的应用程序中有效吗?您可能希望将
searchDelay数字放在useRef挂钩变量中,这样它就不会在渲染之间被覆盖。 -
是的,但我需要以某种方式将 e.target.value 传递给超时函数。我只是不喜欢它;(
-
您可以将
value放入一个新变量中,这是您在handleTagSearch中所做的第一件事,而是使用:const { value } = e.target; -
当我将它传递给超时时它总是未定义
标签: reactjs react-hooks