【发布时间】:2020-05-06 05:29:54
【问题描述】:
我正在尝试在 lodash 中使用 debounce 来延迟 onChange,请参见下面的代码。
import React, { useState, useEffect, useCallback } from "react";
import { TopBar } from "@shopify/polaris";
import { debounce } from "lodash";
function SearchBar() {
const [searchValue, setSearchValue] = useState("");
const handleSearchFieldChange = ((value:string) => {
setSearchValue(value);
});
const debounceLoadData = useCallback(debounce({searchValue} => fetchData, 1000), []);
useEffect(() => {
debounceLoadData();
console.log({searchValue})
}, [searchValue]);
function fetchData(value:string) {
console.log("searchValue " + value);
}
const searchFieldMarkup = (
<TopBar.SearchField
onChange={handleSearchFieldChange}
value={searchValue}
placeholder="Search Value"
/>
);
return <TopBar searchField={searchFieldMarkup} />;
}
一开始,我想在 fetchData 函数中使用searchValue,但似乎因为作用域的原因,它无法读取它,虽然状态已经更新,但它总是为空。
因此,我尝试从 debounceLoadData 传递它,但我不知道如何做到这一点,因为 useCallback 是一个函数调用。我怎样才能在fetchData 中通过searchValue 在debounce 中。
【问题讨论】:
-
也许您应该先让
fetchData函数工作,不要进行任何去抖动或节流,然后再确定是否需要提高性能。
标签: javascript reactjs typescript lodash