패스트캠퍼스 데브캠프

김민태의 데브캠프 2기 - useDebounce Coustom Hooks 만들기

vitamin3000 2024. 11. 12. 17:38

예전에 작성한 포스트에서 입력받은 값을 키워드로 게시물 등을 찾을 때, 값 하나를 입력할 때 마다 APi를 호출했었다.

하지만 이 경우, 백엔드 및 서버에 무리가 간다.

 

따라서 Debounce를 사용하여 이를 방지하고자 한다.

 

Debounce function은 사용자가 미리 결정된 시간 동안 타이핑을 멈출 때 까지 keyup 이벤트 처리를 지연한다.
이를 통해 UI 코드가 모든 이벤트를 처리할 필요가 없고, 서버로 전송되는 API 호출 수도 크게 줄어든다.

 

 

구현 코드 

 

useDebounce.js


export const useDebounce = (value, delay) => {

    const [debouncedValue, setDebouncedValue] = useState(value);

    useEffect(() => {

        const handler = setTimeout(() => {
            setDebouncedValue(value);
        }, delay);

        return () => {
            clearTimeout(handler);
        }
    }, [value, delay])

    return debouncedValue
}

 

App.jsx

사용 방법

  const debouncedSearchTerm = useDebounce(searchTerm, 500);
  
    useEffect(() => {
    if (debouncedSearchTerm) {
      handleSearchInput(debouncedSearchTerm);
    } else {
      fetchPokeData(true);
    }
  }, [debouncedSearchTerm]);