728x90
패스트캠퍼스에서 최적화 강의를 듣는 도중에, useState에 초기값을 할당할 때 최적화 하는 방법에 대해서 배우게 되었다.
관련 코드는 아래와 같다.
const [termsAgreements, setTermsAgreements] = useState(() => {
return 약관목록.reduce<Record<string, boolean>>(
(prev, term) => ({
...prev,
[term.id]: false,
}),
{},
)
약관목록에서 키는 문자 타입의 term의 id값이고, value는 초기값 false인 것들을 termsAgreement의 초기값으로 할당할 것이다.
이때, 이미 만들어진 약관목록 상수값에서 해당 키값을 가져오지만, 이는 최초 렌더링시에 한 번만 실행되면 된다.
const [termsAgreements, setTermsAgreements] = useState(
약관목록.reduce<Record<string, boolean>>(
(prev, term) => ({
...prev,
[term.id]: false,
}),
{},
)
하지만 아래와 같이 할당을 경우 useState가 초기값은 한번의 실행에서만 할당하지만, 매 랜더링마다 reduce함수가 실행되고, 이건 불필요한 성능 저하를 일으킨다.
따라서 이를 콜백함수 형태로 할당할 경우에 성능을 최적화 할 수 있다.
첫 번째 방식으로 할 경우에 최적화가 되는 이유는 리액트가 해당 함수의 결과값이 같은지를 확인하는게 아니라, 해당 함수가 같은지를 확인하기 때문이다.
https://react.dev/reference/react/useState#avoiding-recreating-the-initial-state
useState – React
The library for web and native user interfaces
react.dev
'프론트엔드 > 최적화' 카테고리의 다른 글
react-helmet-async 활용하여 동적으로 메타데이터 처리하기( SEO최적화) (1) | 2024.01.13 |
---|---|
React lazy,와 Suspense를 활용하여 Code Splitting 하기 (0) | 2024.01.12 |
Skeleton UI 로 Layout Shift 관리하기 (0) | 2023.12.25 |
React Tree Shaking으로 번들 사이드 줄이기 (0) | 2023.12.24 |
react input에 랜더링 제어를 위한 디바운스 커스텀훅 만들기 (0) | 2023.08.31 |