React, Vue

useDeferredValue – 입력 딜레이 줄이고 UX 개선하기

jonbeo 2025. 9. 15. 11:25
반응형

 

 

안녕하세요 😊
React에서 검색 기능이나 필터링 기능을 만들다 보면, 입력할 때마다 화면이 순간적으로 버벅거리는 경험을 하신 적 있으실 겁니다.
특히 데이터가 많거나 무거운 연산을 수행할 경우, 사용자가 타이핑하는 속도를 UI가 따라가지 못해 불편해질 수 있습니다.

 

이때 React가 제공하는 useDeferredValue Hook을 사용하면 문제를 쉽게 해결할 수 있습니다.


📍 1. useDeferredValue란?

  • useDeferredValue값 업데이트를 지연 처리하여,
    사용자 인터랙션(입력)은 바로 반영되지만 무거운 연산은 조금 늦게 처리되도록 도와주는 Hook입니다.
  • 즉, UI 우선 / 연산 지연이라는 전략을 통해 UX를 개선합니다.

📍 2. 기본 사용법

 
import { useState, useDeferredValue } from "react";

function Search({ data }) {
  const [query, setQuery] = useState("");
  const deferredQuery = useDeferredValue(query);

  const filtered = data.filter(item =>
    item.toLowerCase().includes(deferredQuery.toLowerCase())
  );

  return (
    <div>
      <input
        value={query}
        onChange={e => setQuery(e.target.value)}
        placeholder="검색어 입력"
      />
      <ul>
        {filtered.map((d, i) => <li key={i}>{d}</li>)}
      </ul>
    </div>
  );
}

 

👉 여기서 중요한 점은

  • query는 입력 즉시 업데이트됩니다.
  • 하지만 filtered는 **지연된 값(deferredQuery)**을 사용하므로, 연산이 살짝 늦게 따라옵니다.

결과적으로 입력창은 즉시 반응하고, 데이터 필터링은 살짝 늦게 반영되어 부드러운 UX가 만들어집니다.


📍 3. 언제 사용하면 좋을까?

  • 검색창: 입력할 때마다 전체 데이터 필터링이 필요한 경우
  • 자동완성: API 요청을 최적화하고 싶을 때
  • 대시보드 필터링: 대용량 데이터를 조건별로 즉시 반영해야 할 때
  • 애니메이션/전환과 동시에 무거운 작업이 있는 경우

📍 4. useDeferredValue vs debounce 차이

많이들 헷갈려 하시는 부분입니다.

구분 useDeferredValue debounce
제공 React 내장 Hook 직접 구현(JS) or 외부 라이브러리
처리 방식 값 업데이트를 React 스케줄링에 맞춰 지연 마지막 입력 후 일정 시간 뒤 실행
주 목적 UI 끊김 방지, 부드러운 사용자 경험 API 호출 최적화, 불필요한 실행 방지

👉 정리하면,

  • API 호출 줄이고 싶다 → debounce
  • UI 반응성을 개선하고 싶다 → useDeferredValue

📍 5. 실무 팁

  1. 검색창 + API 호출
    • useDeferredValue로 UI 반응성 확보
    • debounce로 API 호출 횟수 줄이기
      → 두 가지를 함께 사용하면 최적의 UX
  2. 대량 데이터 테이블 필터링
    • useDeferredValue로 입력과 테이블 렌더링을 분리
    • 입력창은 부드럽고, 데이터는 살짝 늦게 반영
  3. React 18 이상에서만 사용 가능
    • Concurrent Rendering 기능을 기반으로 하므로, React 18 이상 환경에서만 동작합니다.

✅ 마무리

useDeferredValue는 React에서 UI 반응성을 유지하면서 무거운 연산을 지연 처리할 수 있는 강력한 Hook입니다.
검색, 필터링, 대시보드 같은 UI에서 활용하면 사용자 경험을 크게 개선할 수 있으니 꼭 기억해두세요.

반응형