블로그로 돌아가기

React 18의 새로운 기능들

2023년 12월 15일

React 18의 새로운 기능들

React 18이 정식 출시되었습니다! 이번 버전에서는 많은 새로운 기능들이 추가되었는데, 그 중에서도 가장 주목할 만한 기능들을 살펴보겠습니다.

Concurrent Mode

React 18의 가장 큰 변화는 Concurrent Mode의 도입입니다. Concurrent Mode는 React가 여러 작업을 동시에 처리할 수 있게 해주는 기능으로, 사용자 경험을 크게 향상시킬 수 있습니다.

이전 버전의 React에서는 렌더링 작업이 시작되면 중단 없이 완료되어야 했습니다. 하지만 Concurrent Mode에서는 React가 렌더링 작업을 중단하고, 더 중요한 작업을 먼저 처리한 후 다시 돌아올 수 있습니다. 이를 통해 사용자 입력에 더 빠르게 반응할 수 있게 됩니다.

자동 배치 처리

React 18에서는 자동 배치 처리(Automatic Batching)가 개선되었습니다. 이전 버전에서는 React 이벤트 핸들러 내에서만 상태 업데이트가 배치 처리되었지만, 이제는 Promise, setTimeout, 네이티브 이벤트 핸들러 등 모든 상황에서 배치 처리가 가능해졌습니다.

// React 17
      setTimeout(() => {
        setCount(c => c + 1); // 리렌더링 발생
        setFlag(f => !f); // 리렌더링 발생
      }, 1000);
      
      // React 18
      setTimeout(() => {
        setCount(c => c + 1); // 리렌더링 발생하지 않음
        setFlag(f => !f); // 두 상태 업데이트가 배치 처리되어 한 번만 리렌더링 발생
      }, 1000);

Suspense 개선

React 18에서는 Suspense 컴포넌트가 크게 개선되었습니다. 이제 서버 사이드 렌더링에서도 Suspense를 사용할 수 있으며, 데이터 페칭과 코드 스플리팅을 더 효율적으로 처리할 수 있게 되었습니다.

// 데이터 로딩 중에 fallback UI를 보여줍니다.
      <Suspense fallback={<Loading />}>
        <ProfileDetails />
      </Suspense>

새로운 훅: useTransition과 useDeferredValue

React 18에서는 두 가지 새로운 훅이 추가되었습니다.

useTransition: 상태 업데이트의 우선순위를 낮추어 UI의 반응성을 유지할 수 있게 해줍니다.

const [isPending, startTransition] = useTransition();
      
      function handleClick() {
        startTransition(() => {
          // 이 상태 업데이트는 낮은 우선순위로 처리됩니다.
          setTab('photos');
        });
      }

useDeferredValue: 값의 업데이트를 지연시켜 UI의 반응성을 유지할 수 있게 해줍니다.

const deferredQuery = useDeferredValue(query);

결론

React 18은 많은 새로운 기능과 개선 사항을 제공합니다. 특히 Concurrent Mode의 도입은 React 애플리케이션의 성능과 사용자 경험을 크게 향상시킬 것으로 기대됩니다. 이러한 새로운 기능들을 적극적으로 활용하여 더 나은 웹 애플리케이션을 만들어 보세요!