React

React useDeferredValue란? 느린 작업을 부드럽게 처리하는 Hook 사용법 완벽 정리

jonbeo 2025. 8. 5. 11:33
반응형

 

 

이번 글에서는 React의 성능 최적화 Hook 중 하나인
useDeferredValue에 대해 알아보겠습니다.

이 Hook은 사용자 입력과 같이 빠르게 바뀌는 값의 **"지연된 버전"**을 만들어
UI가 끊기지 않고 부드럽게 렌더링될 수 있도록 도와줍니다.

초보자 분들도 이해할 수 있도록 개념부터 사용법, 실전 예제까지 차근차근 설명드릴게요!


📍 1. useDeferredValue란?

useDeferredValue
바로 반영하지 않고, 브라우저가 여유 있을 때 값 업데이트를 미루는 Hook입니다.

주로 입력이 빠르게 바뀌는데, 그걸 기반으로 무거운 연산을 해야 할 때 사용됩니다.

예: 검색창에 입력할 때마다 긴 리스트를 필터링해야 한다면
useDeferredValue로 부하를 줄일 수 있습니다.


📍 2. 기본 사용법

import { useState, useDeferredValue } from 'react';

function SearchComponent() {
  const [input, setInput] = useState('');
  const deferredInput = useDeferredValue(input);

  return (
    <>
      <input value={input} onChange={(e) => setInput(e.target.value)} />
      <SearchResult query={deferredInput} />
    </>
  );
}

 

✔ 핵심 포인트

  • input은 즉시 업데이트되지만
  • deferredInput은 브라우저가 여유 있을 때 처리
    → 느린 연산이 붙은 컴포넌트에서는 deferredInput만 사용!

📍 3. 언제 사용하면 좋은가요?

  • 빠르게 입력되는 값이 렌더링 성능에 영향을 줄 때
  • 검색, 필터링, 정렬 등 비용이 큰 연산이 따라올 때
  • 즉시 반응은 하되, 실제 렌더는 여유 있게 처리하고 싶을 때

📍 4. 실전 예제: 검색 필터에 적용하기

function FilterList({ query }) {
  const list = useMemo(() => {
    return bigData.filter(item => item.includes(query));
  }, [query]);

  return (
    <ul>
      {list.map((item, i) => <li key={i}>{item}</li>)}
    </ul>
  );
}

function App() {
  const [search, setSearch] = useState('');
  const deferredSearch = useDeferredValue(search);

  return (
    <>
      <input value={search} onChange={e => setSearch(e.target.value)} />
      <FilterList query={deferredSearch} />
    </>
  );
}

search 값은 실시간 입력되고,
FilterList는 부드럽게 느려진 검색어로 렌더링됨


📍 5. 주의할 점

  • useDeferredValueUI를 늦추는 용도이지, 디바운스 기능은 아님
  • 사용자의 빠른 입력 자체는 실시간으로 반영되지만
    그걸 사용하는 컴포넌트가 느리게 반응할 뿐입니다

✅ 마무리하며

useDeferredValue는 사용자의 경험을 부드럽게 만들 수 있는
성능 최적화용 Hook입니다.

특히 무거운 리스트 렌더링이나 검색 기능에 잘 활용된다면
앱의 반응 속도가 훨씬 좋아지며, 사용자 만족도도 높아집니다 😊

반응형