⊗jsrtPmHkUTr 17 of 47 menu

React의 성능 최적화 훅 useTransition

성능 최적화 훅 useTransition을 사용하면 UI를 차단하지 않고 상태(state)를 업데이트할 수 있습니다.

이 훅을 통해 특정 상태 업데이트에 낮은 우선순위를 부여할 수 있으며, 이렇게 하면 다른 상태 업데이트가 높은 우선순위를 가져 지연 없이 실행될 수 있습니다.

예를 들어, 사용자가 검색 입력란에 문자를 입력할 때 드롭다운 상품 목록의 필터링을 들 수 있습니다. 목록 자체는 약간의 지연과 함께 표시될 수 있지만, 검색 입력란에 문자가 지연되어 입력되는 것은 원하지 않을 것입니다.

이런 경우에 useTransition 훅이 어떻게 도움을 줄 수 있는지 살펴보겠습니다. 주요 컴포넌트의 코드 일부가 있다고 가정해 봅시다. 분석해 보겠습니다:

import { useTransition } from 'react'; import { useState } from 'react'; function App() { const [isPending, startTransition] = useTransition(); const [filterTerm, setFilterTerm] = useState(''); const filteredProducts = filterProducts(filterTerm); function updateFilterHandler(event) { startTransition(() => { setFilterTerm(event.target.value); }); } return ( <div> <input type="text" onChange={updateFilterHandler} /> <ProductList products={filteredProducts} /> </div> ); }

여기서 useTransition을 위한 두 가지 변수를 볼 수 있습니다. 변수 isPending은 부울 값을 포함하며 업데이트 프로세스가 완료되었는지 여부를 나타내고, startTransition은 업데이트 우선순위를 낮출 수 있게 해주는 함수입니다:

const [isPending, startTransition] = useTransition();

또한 입력란에 입력된 검색어를 저장하는 상태 filterTerm과 이를 설정하는 함수 setFilterTerm이 있습니다:

const [filterTerm, setFilterTerm] = useState('');

인풋에 문자를 입력할 때마다 함수 updateFilterHandler가 호출되며, 여기서 filterTerm의 업데이트가 발생합니다. 바로 여기서 useTransition 훅을 적용하며, 설정 함수 setFilterTerm을 다음과 같이 startTransition으로 래핑합니다:

function updateFilterHandler(event) { startTransition(() => { setFilterTerm(event.target.value); }); }

이렇게 하여 상태 filterTerm의 업데이트에 낮은 우선순위를 설정했으며, 이로 인해 우리의 입력 필드는 반응성을 유지할 것입니다.

변수 isPending을 사용하여 목록 업데이트가 아직 진행 중임을 사용자에게 표시할 수 있습니다. 목록이 업데이트되는 동안 입력 필드 아래에 이 정보를 출력해 보겠습니다:

return ( <div> <input type="text" onChange={updateFilterHandler} /> {isPending && <p>업데이트 중 ...</p>} <ProductList products={filteredProducts} /> </div> );
한국어
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақКыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
우리는 웹사이트 운영, 분석 및 개인화를 위해 쿠키를 사용합니다. 데이터 처리는 개인정보 처리방침에 따라 이루어집니다.
모두 수락 설정 거부