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에 전달되는 값이 '동일'하면 리랜더링을 촉발시키지 않는다.
참고 사이트
memo – React
The library for web and native user interfaces
ko.react.dev
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 |