簡體   English   中英

Lodash 油門在 React 中無法正常工作

[英]Lodash throttle not working correctly in React

我有一個 function 可以過濾一些 state 並呈現搜索請求的結果。

  const handleSearch = (value: string) => {
   const searchResultData = users.filter((userId) => user.id.startsWith(value));
   setSearchResult(searchResultData);
  };

我正在嘗試使用lodash.throttle庫在發送請求之前造成延遲。 因此,我們不會在每次用戶鍵入時發出請求 go。

 const handleSearch = useCallback(throttle((value: string) => {
  const searchResultData = users.filter((userId) => user.id.startsWith(value));
  setSearchResult(searchResultData);
 }, 2500), []);

這可以按預期延遲輸入,但由於某種原因, user.filter方法不會運行,因此 state 不會隨搜索結果一起更新。 我相信問題可能出在useCallback掛鈎上,但throttle function 依賴於它運行。 關於如何解決此問題的任何想法?

如果您的 throttled/debounced 處理程序使用 props 或 state,如下所示:

const { fetcherFunctionFromProps } = props;

const eventHandler = async () => {
  const resp = await fetcherFunctionFromProps();
};    

const debouncedEventHandler = useMemo(
  () => throttle(eventHandler, 300)
), [fetcherFunctionFromProps]);

它不起作用,
您可以將其重構為以下內容:

const { fetcherFunctionFromProps } = props;

const eventHandler = async (fetcher) => {
  const resp = await fetcher();
};

const debouncedEventHandler = useMemo(() => throttle(eventHandler, 300), []);
...
<Component onClick={() => debouncedEventHandler(fetcherFunctionFromProps)}>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM