F-Lab
🚀
상위권 IT회사 합격 이력서 무료로 모아보기

리액트 18의 새로운 훅: useDeferredValue와 useTransition

writer_thumbnail

F-Lab : 상위 1% 개발자들의 멘토링

AI가 제공하는 얕고 넓은 지식을 위한 짤막한 글입니다!



리액트 18의 새로운 기능 소개

리액트 18은 많은 새로운 기능과 개선 사항을 도입했습니다. 그 중에서도 특히 주목할 만한 것은 새로운 훅인 useDeferredValueuseTransition입니다.

이 두 훅은 사용자 경험을 향상시키기 위해 설계되었으며, 특히 UI 업데이트와 관련된 성능 문제를 해결하는 데 큰 도움이 됩니다.

이번 글에서는 이 두 훅의 개념과 사용법, 그리고 실제 예제를 통해 어떻게 활용할 수 있는지 알아보겠습니다.

왜냐하면 리액트 18의 새로운 기능을 이해하고 활용하는 것은 최신 기술 트렌드를 따라가는 데 매우 중요하기 때문입니다.

그럼 이제 본격적으로 useDeferredValue와 useTransition에 대해 알아보겠습니다.



useDeferredValue: 디바운싱의 대체제

useDeferredValue는 디바운싱을 대체할 수 있는 훅입니다. 디바운싱은 사용자가 입력을 마칠 때까지 업데이트를 지연시키는 기술입니다.

예를 들어, 사용자가 검색어를 입력할 때마다 API를 호출하는 대신, 입력이 끝난 후 일정 시간 동안 입력이 없을 때 API를 호출하는 방식입니다.

왜냐하면 디바운싱을 통해 불필요한 API 호출을 줄이고, 서버 부하를 줄일 수 있기 때문입니다.

useDeferredValue는 이러한 디바운싱을 더욱 간편하게 구현할 수 있게 해줍니다. 다음은 useDeferredValue를 사용하는 예제입니다:

const deferredValue = useDeferredValue(value);
useEffect(() => {
    // deferredValue를 사용하여 API 호출
}, [deferredValue]);

이 훅을 사용하면, React가 자동으로 최적의 타이밍에 업데이트를 처리해줍니다.



useTransition: UI 블로킹 없이 상태 업데이트

useTransition은 UI 블로킹 없이 상태를 업데이트할 수 있는 훅입니다. 이 훅은 특히 탭 전환과 같은 무거운 UI 업데이트에 유용합니다.

왜냐하면 탭 전환 시 많은 요소를 다시 렌더링해야 하는 경우, UI가 버벅거릴 수 있기 때문입니다.

useTransition을 사용하면, 상태 전환을 비동기적으로 처리하여 UI가 부드럽게 전환됩니다. 다음은 useTransition을 사용하는 예제입니다:

const [isPending, startTransition] = useTransition();
const handleClick = () => {
    startTransition(() => {
        setTab(newTab);
    });
};

이 훅을 사용하면, 상태 전환이 비동기적으로 처리되어 UI가 부드럽게 전환됩니다.



useDeferredValue와 useTransition의 차이점

useDeferredValue와 useTransition은 모두 UI 성능을 향상시키기 위한 훅이지만, 그 사용 목적과 방식에는 차이가 있습니다.

useDeferredValue는 주로 디바운싱을 대체하기 위해 사용되며, 입력이 끝난 후 일정 시간 동안 업데이트를 지연시킵니다.

반면, useTransition은 무거운 UI 업데이트를 비동기적으로 처리하여 UI가 부드럽게 전환되도록 합니다.

왜냐하면 두 훅의 사용 목적이 다르기 때문에, 상황에 맞게 적절히 선택하여 사용하는 것이 중요하기 때문입니다.

다음은 두 훅을 함께 사용하는 예제입니다:

const deferredValue = useDeferredValue(value);
const [isPending, startTransition] = useTransition();
useEffect(() => {
    startTransition(() => {
        // deferredValue를 사용하여 API 호출
    });
}, [deferredValue]);

이 예제에서는 useDeferredValue를 사용하여 입력을 지연시키고, useTransition을 사용하여 상태 전환을 비동기적으로 처리합니다.



리액트 18의 다른 새로운 훅들

리액트 18에는 useDeferredValue와 useTransition 외에도 여러 새로운 훅들이 도입되었습니다. 그 중 하나가 useSyncExternalStore입니다.

useSyncExternalStore는 외부 스토어와 동기화된 상태를 관리하기 위한 훅입니다. 이 훅을 사용하면, 외부 스토어의 상태 변경을 감지하고, 컴포넌트를 업데이트할 수 있습니다.

왜냐하면 외부 스토어와의 동기화는 복잡한 상태 관리에서 매우 중요한 부분이기 때문입니다.

다음은 useSyncExternalStore를 사용하는 예제입니다:

const state = useSyncExternalStore(
    subscribe,
    getSnapshot,
    getServerSnapshot
);

이 훅을 사용하면, 외부 스토어와 동기화된 상태를 간편하게 관리할 수 있습니다.



결론: 리액트 18의 새로운 훅을 활용하자

리액트 18은 많은 새로운 기능과 개선 사항을 도입했습니다. 그 중에서도 특히 주목할 만한 것은 새로운 훅인 useDeferredValue와 useTransition입니다.

이 두 훅은 사용자 경험을 향상시키기 위해 설계되었으며, 특히 UI 업데이트와 관련된 성능 문제를 해결하는 데 큰 도움이 됩니다.

왜냐하면 리액트 18의 새로운 기능을 이해하고 활용하는 것은 최신 기술 트렌드를 따라가는 데 매우 중요하기 때문입니다.

이번 글에서는 이 두 훅의 개념과 사용법, 그리고 실제 예제를 통해 어떻게 활용할 수 있는지 알아보았습니다.

리액트 18의 새로운 훅을 활용하여 더욱 향상된 사용자 경험을 제공할 수 있기를 바랍니다.

ⓒ F-Lab & Company

이 컨텐츠는 F-Lab의 고유 자산으로 상업적인 목적의 복사 및 배포를 금합니다.

조회수
F-Lab
소개채용멘토 지원
facebook
linkedIn
youtube
instagram
logo
(주)에프랩앤컴퍼니 | 사업자등록번호 : 534-85-01979 | 대표자명 : 박중수 | 전화번호 : 1600-8776 | 제휴 문의 : info@f-lab.kr | 주소 : 서울특별시 강남구 테헤란로63길 12, 438호 | copyright © F-Lab & Company 2025