0Pricing
React Academy · 강의

입력 디바운싱을 위한 useDeferredValue

입력 반응성은 유지하면서 UI에서 느린 부분의 다시 렌더링을 지연합니다.

입력 디바운싱을 위한 useDeferredValue은(는) CoddyKit의 무료 React Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 React Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

환영합니다

이 레슨에서는 useDeferredValue를 사용해 비용이 큰 사용자 인터페이스 부분의 다시 렌더링을 늦추면서 제어되는 입력을 즉각적이고 반응성 있게 유지하는 방법을 배웁니다.

useDeferredValue란 무엇입니까

useDeferredValue는 value를 받아 지연된 버전으로 반환합니다. 긴급한 렌더링 중에는 지연된 value가 현재 value보다 뒤처지므로 React가 사용자 인터페이스를 두 단계로 업데이트할 수 있습니다. 입력은 빠르게 처리하고 비용이 큰 output은 지연하는 방식입니다.
const [query, setQuery] = useState('');
const deferredQuery = useDeferredValue(query);
// query updates immediately on keystroke
// deferredQuery updates when React has capacity

비용이 큰 컴포넌트에 적용하기

실시간 value가 아닌 지연된 value를 비용이 큰 컴포넌트에 전달하십시오. 비용이 큰 컴포넌트는 빠르게 입력할 때 입력보다 뒤처지는 deferredQuery가 변경될 때만 다시 렌더링됩니다.
function App() {
  const [q, setQ] = useState('');
  const dq = useDeferredValue(q);
  return (
    <>
      <input value={q} onChange={e => setQ(e.target.value)} />
      <HeavyList query={dq} /> {/* renders with deferred value */}
    </>
  );
}

오래된 콘텐츠 표시기 표시

실시간 value와 지연된 value를 비교하십시오. 둘이 다르면 콘텐츠가 오래된 상태이므로 opacity로 흐리게 표시하거나 로딩 스피너를 보여 줄 수 있습니다.
const isStale = q !== dq;
<div style={{ opacity: isStale ? 0.5 : 1 }}>
  <HeavyList query={dq} />
</div>

useDeferredValue와 디바운스 비교

setTimeout 기반 디바운스는 빠른 기기에서도 항상 고정된 지연 시간(예: 300ms)을 추가합니다. useDeferredValue는 적응형입니다. 빠른 기기에서는 즉시 렌더링하고 느린 기기에서는 끊김을 방지하기 위해 지연합니다.

useDeferredValue와 useTransition 비교

상태 설정자를 OWN하는 경우에는 useTransition을 사용하십시오(setState를 감쌀 수 있는 경우). 속성이나 컨텍스트에서 value를 받아 업데이트 시점을 제어할 수 없는 경우에는 useDeferredValue를 사용하십시오.
// You own the state: use useTransition
startTransition(() => setTab(newTab));

// You receive the value: use useDeferredValue
const deferredProp = useDeferredValue(props.searchQuery);

React.memo와 함께 사용하기

useDeferredValue가 다시 렌더링을 효과적으로 건너뛰려면 비용이 큰 컴포넌트를 React.memo로 감싸야 합니다. 그렇지 않으면 지연된 value와 관계없이 부모가 렌더링될 때마다 컴포넌트가 다시 렌더링됩니다.
const HeavyList = React.memo(function({ query }) {
  // expensive rendering
  return <ul>{data.filter(q => ...).map(...)}</ul>;
});

초기 렌더링에서의 지연된 value

초기 렌더링에서는 지연된 value가 현재 value와 같으므로 지연이 없습니다. 다시 렌더링 중에 현재 value와 지연된 value가 모두 달라질 때만 지연이 시작됩니다.

여러 지연된 value

서로 다른 비용이 큰 사용자 인터페이스 부분에 대해 useDeferredValue를 여러 번 호출할 수 있으며, 각각 독립적으로 지연됩니다.
const deferredA = useDeferredValue(valueA);
const deferredB = useDeferredValue(valueB);

제한 사항

useDeferredValue는 렌더링을 더 빠르게 만들지 않고 단지 지연할 뿐입니다. 비용이 큰 렌더링에 500ms가 걸린다면 사용자 인터페이스는 여전히 끊깁니다. 정말 큰 목록에는 가상화(react-virtual)를 함께 사용하십시오.

빠른 확인

useDeferredValue는 일반적인 value보다 언제 이점을 제공합니까?

복습

useDeferredValue는 value의 지연된 버전을 반환합니다. 이를 비용이 크고 React.memo로 감싼 컴포넌트에 전달하십시오. deferredValue !== value일 때 오래된 콘텐츠 표시기를 보여 주십시오. 적응형 성능을 위해 고정 지연 디바운스보다 useDeferredValue를 우선하십시오.

다음 학습 내용

다음 레슨에서는 **데이터 및 코드 경계를 위한 Suspense**를 배웁니다. Suspense를 지연 로딩 및 데이터 라이브러리와 결합해 깔끔한 로딩 상태를 구현하게 됩니다.

자주 묻는 질문

“입력 디바운싱을 위한 useDeferredValue” 강의는 무료인가요?

네 — “입력 디바운싱을 위한 useDeferredValue” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 React Academy 강의 전체를 잠금 해제할 수 있습니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“입력 디바운싱을 위한 useDeferredValue”에서 뭘 배우나요?

입력 반응성은 유지하면서 UI에서 느린 부분의 다시 렌더링을 지연합니다. 브라우저에서 직접 실행하는 실습 코드로 React Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

React Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 React Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“입력 디바운싱을 위한 useDeferredValue” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 React Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 React Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 경쟁 상태와 효과 정리
  2. 차단하지 않는 UI 업데이트를 위한 useTransition
  3. 입력 디바운싱을 위한 useDeferredValue
  4. 데이터 및 코드 경계를 위한 Suspense
← React Academy(으)로 돌아가기