아래는 자식 컴포넌트의 렌더링을 최적화하는 주요 방법을 표로 정리한 내용입니다.
최적화 방법 | 설명 | 코드 예시 및 주의사항 |
---|---|---|
React.memo | - 부모 컴포넌트가 리렌더링되어도 props가 변하지 않으면 자식 컴포넌트를 리렌더링하지 않음. | jsx<br>const Child = React.memo(({ value }) => {<br> return <p>{value}</p>;<br>});<br> |
useCallback | - 함수를 메모이제이션하여 동일한 함수 인스턴스를 유지. | jsx<br>const memoizedCallback = useCallback(() => {<br> doSomething();<br>}, [dependencies]);<br> |
React.lazy | - 컴포넌트를 필요할 때만 로드하여 초기 렌더링 성능을 개선. | jsx<br>const LazyChild = React.lazy(() => import('./Child'));<br><Suspense fallback={<div>Loading...</div>}><LazyChild /></Suspense><br> |
useMemo | - 계산된 값을 메모이제이션하여 불필요한 계산 방지. | jsx<br>const computedValue = useMemo(() => heavyComputation(input), [input]);<br> |
shouldComponentUpdate (Class) | - 클래스 컴포넌트에서 렌더링 조건을 명시적으로 설정. | jsx<br>shouldComponentUpdate(nextProps, nextState) {<br> return nextProps.value !== this.props.value;<br>}<br> |
PureComponent | - 클래스 컴포넌트에서 props와 state를 얕은 비교로 렌더링 여부를 결정. | jsx<br>class Child extends React.PureComponent {<br> render() {<br> return <p>{this.props.value}</p>;<br> }<br>}<br> |
키 설정 (Key Prop) | - 리스트 렌더링 시 고유 키를 설정하여 불필요한 DOM 변경 방지. | jsx<br>items.map(item => (<div key={item.id}>{item.name}</div>))<br> |
Code Splitting | - Webpack 등으로 코드 스플릿을 활용하여 필요할 때만 로드. | - React.lazy와 함께 사용하여 대규모 앱 최적화. |
useCallback
과 useMemo
사용 시 의존성 배열을 정확히 설정하지 않으면 버그 발생 가능.후속 추천 질문
번호를 입력하거나, 계속해서 대화를 이어가시면 됩니다.