반응형
이전 관련 글
2023.03.23 - [개발/React] - [React] lodash를 활용한 debounce
2023.03.26 - [개발/React] - [React] useTransition 알아보기
useDeferredValue
useDeferredValue도 useTransition과 마찬가지로 React 18에 들어와서 새로 도입된 HOOK이다.
사용방법
const deferredValue = useDeferredValue(value);
useDeferredValue에 값이 들어오게 되면, 렌더링 우선순위에 따라 값을 반환하게 된다.
useTransition은 setState와 같은 함수의 우선순위라면, useDeferredValue는 값의 우선순위에 따라 값을 지연하게 된다.
이는 api호출 시 디바운싱과 동일하다고 보면 된다.
useDeferredValue와 useTransition의 동작방식은 거의 동일하며, useTransition은 setState를 트리거할 때, useDeferredValue는 상위 구성요소에서 새 데이터를 수신할 때 사용된다.
React공식문서의 예제를 보면, useDeferredValue를 useMemo와 같이 사용하여 기존과 변경이 있을 때만 다시 렌더링 하게 하여, 불필요한 렌더링을 막아준다.
function Typeahead() {
const query = useSearchQuery('');
//useDeferredValue 사용
const deferredQuery = useDeferredValue(query);
// Memoizing tells React to only re-render when deferredQuery changes,
// not when query changes.
const suggestions = useMemo(() =>
<SearchSuggestions query={deferredQuery} />,
[deferredQuery]
);
return (
<>
<SearchInput query={query} />
<Suspense fallback="Loading results...">
{suggestions}
</Suspense>
</>
);
}
위 예제는 검색 자동완성을 처리하는 코드이며, useDeferredValue를 사용하면 디바운싱을 따로 적용하지 않아도 유저 경험을 더 좋게 할 수 있다.
반응형
'개발 > React' 카테고리의 다른 글
React 19 업데이트 변경 점 (0) | 2025.01.10 |
---|---|
[React] useTransition 알아보기 (0) | 2023.03.26 |
[React] lodash를 활용한 debounce (0) | 2023.03.23 |
[React] useEffect의 cleanup, useLayoutEffect (0) | 2023.03.21 |
[React] 디바운스(Debounce), 쓰로틀(Throttle) (0) | 2023.03.19 |
댓글