728x90
728x90
React.memo()
들어가며
- 리액트(React.js)에서 제공하는 고차 함수(Higher-Order Component)인 @React.memo()@에 대해 정리해본다.
React.memo()
개념
- 리액트에서 제공하는 고차 함수(Higher-Order Component)
- 함수형 컴포넌트의 불필요한 재렌더링을 방지하는 역할을 한다.
- 전달된 @props@가 변경되지 않는 한 해당 컴포넌트는 다시 렌더링되지 않도록 최적화(Optimization)할 수 있다.
- @React.memo()@는 함수형 컴포넌트를 인자로 받아, 그와 동일한 동작을 하는 새로운 컴포넌트를 반환하지만, 추가적으로 @props@가 변경되었는지 확인하는 최적화 작업이 추가된다.
- @props@가 변경되지 않은 경우, 메모이제이션된 컴포넌트는 이전 렌더링에서 캐시된 결과를 반환한다.
사용 방법
import { useState, memo } from 'react';
// 일반적인 자식 컴포넌트
const ChildComponent = ({ value }) => {
// ...
};
// React.memo로 감싸서 최적화 하기
const MemoizedChildComponent = memo(ChildComponent);
const ParentComponent = () => {
// ...
return (
<div>
// ...
<MemoizedChildComponent value={value} />
</div>
);
};
export default ParentComponent;
- 아래와 같이 2가지 방법으로 사용할 수 있다.
방법 ① : React.memo() 사용하기
import React, { useState } from 'react';
const MyComponent = (props) => {
return <div>{props.name}</div>;
};
export default React.memo(MyComponent);
방법 ② : memo() 사용하기
import { memo } from 'react';
const MyComponent = (props) => {
return <div>{props.name}</div>;
};
export default memo(MyComponent);
사용 이유
- 리액트에서 부모 컴포넌트가 업데이트될 때 자식 컴포넌트도 함께 다시 렌더링되는데, 만약 자식 컴포넌트에 전달된 @props@가 변하지 않는다면, 불필요한 렌더링이 발생하게 된다.
- 이럴 때 @React.memo()@를 사용하면 성능을 최적화할 수 있다.
import { memo } from 'react';
const MyComponent = ({ name }) => {
console.log('MyComponent rendered');
return <div>Hello, {name}!</div>;
};
// React.memo로 감싸서 불필요한 렌더링을 방지
export default memo(MyComponent);
⇒ @React.memo()@로 감싸진 컴포넌트는 부모 컴포넌트가 업데이트되어도 전달된 @props@(@name@)가 변경되지 않으면 다시 렌더링되지 않는다.
⇒ @React.memo()@는 기본적으로 얕은 비교(Shallow Comparison)를 사용하여 @props@의 변경 여부를 판단한다.
✅ 원시 타입 (문자열, 숫자 등) → 값이 변경되었는지 확인
✅ 참조 타입 (객체, 배열 등) → 참조가 변경되었는지 확인
커스텀 비교 함수
- @React.memo()@는 기본적으로 얕은 비교를 하지만, 필요할 경우 직접 비교 로직을 정의할 수 있다.
- @React.memo()@의 두 번째 인자로 커스텀 비교 함수를 전달하여 더 정교한 조건으로 렌더링 여부를 결정할 수 있다.
const areEqual = (prevProps, nextProps) => {
return prevProps.value === nextProps.value; // 원하는 비교 로직 정의
};
export default memo(MyComponent, areEqual); // 두 번째 인자에 커스텀 비교 함수 넣기
React.memo()를 이용하여 불필요한 리랜더링을 막아 성능을 최적화시킬 수 있다. React.memo()는 컴포넌트의 props에 전달되는 값이 '동일'하면 리랜더링을 촉발시키지 않는다.
참고 사이트
728x90
728x90
'Programming > React' 카테고리의 다른 글
[React.js] React Query Devtools (0) | 2024.09.22 |
---|---|
[React.js] 코드 분할(Code Splitting) : useTransition 훅, Suspense 컴포넌트, lazy 함수 (0) | 2024.09.20 |
[React.js] useMemo 훅 (0) | 2024.09.20 |
[React.js] useCallback 훅 (0) | 2024.09.20 |
[React.js] Context API를 이용하여 전역 상태 관리하기 (2) | 2024.09.11 |
[React.js] react-toastify 라이브러리 (0) | 2024.09.10 |
[React.js] uuid, nanoid 라이브러리 사용하기 (key) (0) | 2024.09.09 |
[React.js] 로컬 스토리지(LocalStorage)에 내용을 저장하고, 전역 상태 관리 라이브러리(Redux)와 동기화 하는 방법 (1) | 2024.09.07 |