번역 자료 / / 2025. 5. 27. 09:42

[react 번역] startTransition

출처: https://react.dev/reference/react/startTransition


개요

startTransition은 UI의 일부를 백그라운드에서 렌더링하도록 상태 업데이트를 트랜지션(Transition)으로 표시하는 React API입니다. 트랜지션으로 표시된 업데이트는 비차단(non-blocking)으로 처리되어, 입력 등 긴급한 UI 반응성을 유지할 수 있습니다.

startTransition(action);

Reference

startTransition(action)

상태 업데이트를 트랜지션으로 감싸 비차단(non-blocking)으로 처리합니다.

  • 파라미터
    • action: 하나 이상의 set 함수로 상태를 업데이트하는 함수. 이 함수 내에서 동기적으로 발생한 모든 상태 업데이트가 트랜지션으로 표시됩니다. 비동기(await) 이후의 set 함수는 별도의 startTransition으로 감싸야 트랜지션으로 처리됩니다(아래 caveat 참고).
  • 반환값
    • 반환값 없음(void)

Caveats(주의사항)

  • startTransition은 트랜지션이 진행 중인지 추적할 수 있는 isPending 플래그를 제공하지 않습니다. 진행 상태를 표시하려면 useTransition을 사용하세요.
  • set 함수에 직접 접근할 수 있을 때만 트랜지션으로 감쌀 수 있습니다. prop이나 커스텀 훅의 반환값 등에서는 useDeferredValue를 고려하세요.
  • action 함수는 즉시 호출되며, 이 안에서 발생한 동기적 상태 업데이트만 트랜지션으로 처리됩니다. setTimeout 등 비동기 컨텍스트에서 발생한 업데이트는 트랜지션으로 처리되지 않습니다.
  • await 이후의 set 함수는 별도의 startTransition으로 감싸야 트랜지션으로 처리됩니다(향후 개선 예정).
  • 트랜지션으로 표시된 상태 업데이트는 다른 상태 업데이트에 의해 중단(interrupt)될 수 있습니다. 예를 들어, 트랜지션 중에 input 입력이 발생하면, 트랜지션 렌더링이 중단되고 입력 처리가 우선됩니다.
  • 트랜지션 업데이트는 input 등 제어 컴포넌트의 값을 직접 변경하는 데 사용할 수 없습니다.
  • 여러 트랜지션이 동시에 발생하면 React가 현재는 모두 하나로 묶어 처리합니다(향후 개선 예정).

사용법

상태 업데이트를 비차단 트랜지션으로 표시하기

import { startTransition } from 'react';

function TabContainer() {
  const [tab, setTab] = useState('about');

  function selectTab(nextTab) {
    startTransition(() => {
      setTab(nextTab);
    });
  }
  // ...
}
  • 트랜지션으로 표시된 업데이트는 UI가 느려도 입력 등 긴급한 작업이 우선 처리됩니다.
  • 사용자가 탭을 빠르게 여러 번 클릭해도, 이전 트랜지션이 끝나기 전에 새 트랜지션이 시작될 수 있습니다.

useTransition과의 차이

  • startTransition은 진행 상태(isPending)를 제공하지 않습니다. 진행 상태를 UI에 표시하려면 useTransition을 사용하세요.
  • startTransition은 컴포넌트 외부(예: 데이터 라이브러리 등)에서도 사용할 수 있습니다.

참고 및 주의사항

  • 트랜지션 내에서 input 등 제어 컴포넌트의 값을 직접 변경하면 안 됩니다.
  • 여러 트랜지션이 동시에 발생하면 현재는 모두 하나로 묶어 처리됩니다.
  • 트랜지션 내에서 비동기 작업 후 set 함수는 별도의 startTransition으로 감싸야 합니다.

출처: https://react.dev/reference/react/startTransition

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유