簡體   English   中英

"用 useEffect 反應去抖動"

[英]react debounce with useEffect

我正在嘗試使用 debounce 實現自動完成搜索,

下面是我使用 lodash 的 debounce 的嘗試,似乎 debounce 不起作用。

我在輸入時看到每個字符都在被搜索

   const [query, setQuery] = useState('')
   const _search = () => {
     console.log('query: ', query)
     // network search request
   }

   const search = _.debounce(_search, 300)

   useEffect(() => {
     search()
   }, [query])

   const handleChangeQuery = useCallback((query) => {
     setQuery(query)
   })

您可以使用去抖動(或在另一個組件中使用)創建自定義組件輸入,而無需庫

例如像這樣的一些:

import React, { useEffect, useState } from 'react';

const InputDebounce = () => {

    const [text, setText] = useState('');

    useEffect(() => {
        const timeoutId = setTimeout(() => {
            console.log(text)
            //some function here
        }, 500);

        return () => clearTimeout(timeoutId)
    }, [text])


    return <input type="text" onChange={(e) => setText(e.target.value)} />
};

export default InputDebounce;

clearTimeOut定義為 useEffect 的 return insde 非常重要,這樣可以正常工作。

暫無
暫無

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

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