0Pricing
React Academy · 강의

차단하지 않는 UI 업데이트를 위한 useTransition

비용이 큰 상태 업데이트를 startTransition으로 감싸 UI가 계속 반응하도록 합니다.

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

환영합니다

이 레슨에서는 useTransition 훅을 사용해 비용이 큰 상태 업데이트를 긴급하지 않은 작업으로 표시하고, 무거운 렌더링이 백그라운드에서 진행되는 동안에도 사용자 인터페이스의 반응성을 유지하는 방법을 배웁니다.

업데이트가 차단하는 문제

큰 목록을 필터링하는 검색 상자에 입력할 때 React는 키를 누를 때마다 필터링된 전체 목록을 다시 렌더링해야 합니다. 이 때문에 input이 즉시 업데이트되지 못해 사용자 인터페이스가 느리게 느껴집니다.

React 동시성 모드

React 18에서는 동시 렌더링이 도입되었습니다. React는 상태 업데이트 렌더링을 시작했다가 일시 중지하고, 입력처럼 더 긴급한 업데이트를 우선 처리할 수 있습니다. useTransition은 업데이트를 낮은 우선순위의 전환으로 분류할 수 있게 해 주는 훅입니다.

useTransition 기초

useTransition은 `[isPending, startTransition]`을 반환합니다. 긴급하지 않은 상태 업데이트를 `startTransition()` 안에 넣으십시오. React는 전환보다 제어되는 입력과 같은 다른 업데이트를 우선 처리합니다.
const [isPending, startTransition] = useTransition();

const handleChange = (e) => {
  setInputValue(e.target.value); // urgent: update input immediately
  startTransition(() => {
    setFilteredList(filter(e.target.value)); // non-urgent
  });
};

로딩 UI를 위한 isPending

전환이 처리되는 동안 `isPending`은 `true`입니다. 이를 사용해 로딩 스피너를 표시하거나 오래된 결과 목록을 흐리게 만들면 업데이트가 진행 중임을 사용자에게 알릴 수 있습니다.
return (
  <>
    <input value={inputValue} onChange={handleChange} />
    {isPending && <Spinner />}
    <ResultList items={filteredList} />
  </>
);

startTransition 안에 넣는 내용

startTransition 안에는 상태 업데이트만 넣으십시오. 비동기 작업은 넣지 마십시오. 비용이 큰 렌더링을 일으키는 상태 업데이트를 감싸는 것입니다.
// Correct
startTransition(() => setTab('heavy'));

// Wrong — async work outside React state
startTransition(async () => { await fetch(...); }); // not supported

훅 없이 사용하는 startTransition

`isPending`이 필요하지 않다면 훅 없이 React에서 startTransition을 직접 가져와 호출할 수 있습니다.
import { startTransition } from 'react';

startTransition(() => setQuery(newValue));

탭 전환 예시

일반적인 사용 사례는 탭을 클릭해 무거운 컴포넌트로 전환하는 것입니다. 탭 변경을 startTransition으로 감싸면 무거운 컴포넌트가 백그라운드에서 렌더링되는 동안 활성 탭 표시기는 즉시 업데이트됩니다.
const [tab, setTab] = useState('posts');
const [isPending, startTransition] = useTransition();

const selectTab = (t) =>
  startTransition(() => setTab(t));

useTransition과 useDeferredValue 비교

useTransition은 상태 업데이트를 직접 OWN하는 경우에 사용합니다(setState를 호출하는 경우). useDeferredValue는 직접 지연할 수 없는 속성이나 value를 받을 때 사용하며, 이 경우 value 자체를 지연합니다.

최적화를 대신하지 않습니다

startTransition은 렌더링을 더 빠르게 만들지 않고 단지 지연할 뿐입니다. 컴포넌트 렌더링에 500ms가 걸린다면 여전히 500ms가 걸립니다. 실제로 느린 목록에는 React.memo나 가상화를 함께 사용하십시오.

빠른 확인

useTransition에서 반환되는 isPending은 무엇을 나타냅니까?

복습

useTransition을 사용하면 상태 업데이트를 긴급하지 않은 전환으로 분류할 수 있습니다. 입력과 같은 긴급한 업데이트는 즉시 렌더링되고, 전환은 React에 여유가 있을 때 렌더링됩니다. isPending을 사용해 로딩 피드백을 표시하십시오.

다음 학습 내용

다음 레슨에서는 **입력 디바운스를 위한 useDeferredValue**를 배웁니다. 입력의 즉각적인 반응성을 유지하면서 사용자 인터페이스의 느린 부분이 다시 렌더링되는 시점을 늦추게 됩니다.

자주 묻는 질문

“차단하지 않는 UI 업데이트를 위한 useTransition” 강의는 무료인가요?

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

“차단하지 않는 UI 업데이트를 위한 useTransition”에서 뭘 배우나요?

비용이 큰 상태 업데이트를 startTransition으로 감싸 UI가 계속 반응하도록 합니다. 브라우저에서 직접 실행하는 실습 코드로 React Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

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

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

“차단하지 않는 UI 업데이트를 위한 useTransition” 강의는 얼마나 걸리나요?

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

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

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

이 강의의 모든 강의

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