【发布时间】:2020-11-01 10:23:59
【问题描述】:
我的一个页面中有一个搜索输入,我正在努力确保如果用户输入速度过快,它不会在一秒钟内发出 10 个请求。
似乎去抖动是要走的路。我已经阅读了多篇博客文章和 SO 问题。我正在尝试使用 lodash 的 debounce。我一定是做错了什么,因为我的所有调用都通过了,就在稍后。
这是我的组件代码:
const Partners = (props: any) => {
const [query, setQuery] = useState("");
const { partners, totalPages, currentPage } = props.partnersList;
useEffect(() => {
props.getPartners();
}, []);
useEffect(() => debounce(() => props.getPartners(query), 10000), [query]);
const handleQueryChange = (e: any) => {
setQuery(e.target.value);
};
const handlePageChange = (e: React.ChangeEvent<unknown>, value: number) => {
props.getPartners(query, value);
};
return (
<React.Fragment>
<Sidebar />
<MainContent className="iamSearchPartners">
<h1>Partners</h1>
<TextField
className="iamSearchPartners__search_input"
variant="outlined"
size="small"
onChange={handleQueryChange}
value={query}
/>
<PartnersList partners={partners} />
{totalPages > 1 && (
<Pagination
currentPage={currentPage || 1}
totalPages={totalPages}
handlePageChange={handlePageChange}
/>
)}{" "}
</MainContent>
</React.Fragment>
);
};
如您所见,我有一个 useEffect 监听查询的变化。
【问题讨论】:
-
这是迄今为止我为 debounce 事件找到的最好的库之一:github.com/xnimorz/use-debounce 看看。还有一个 defaultValue={curretState} 将显着提高你的表现,这是一个加号。
标签: javascript reactjs ecmascript-6 debouncing