【发布时间】:2020-03-09 20:26:42
【问题描述】:
我想在使用停止输入(或按回车键)时执行一个功能(查询搜索服务) 我看到了一些使用 lodash Debounce 的例子
我正在玩 react hooks,想看看是否可以在没有任何外部库的情况下实现这一点。
import React, { useState } from 'react';
import Api from './Api'
const Search = (props) => {
const [keyword, setKeyword] = useState();
const [results, setResults] = useState([]);
let timeout;
const handleSearch = (event) => {
setKeyword(event.target.value);
if (timeout) {
clearTimeout(timeout);
}
timeout = setTimeout(() => {
timeout = null;
if (keyword) {
callSearchService()
}
}, 1000);
}
const callSearchService = () => {
Api.search(keyword)
.then(
results => setResults(results),
error => console.log(error)
)
}
return (
<input type="search" onKeyUp={(e) => handleSearch(e)} />
)
}
执行被延迟了 1000 毫秒,但随后每个字符调用一次该函数(最后一个字符除外。这没有被执行,我尝试使用 onChange 而不是 onKeyUp,但同样的问题)。我可能把超时放在错误的地方。感谢您的无限智慧
【问题讨论】:
-
我想知道你的超时变量是否被清除了,因为通过钩子更新状态会导致控件重新渲染并将超时变量再次设置为未定义。
标签: reactjs