728x90
728x90
memo() 사용할 때 주의할 점
들어가며
- 리액트(React.js)의
memo()
를 사용할 때 주의할 점을 정리해본다.

memo()
개념
- 함수형 컴포넌트를 메모이제이션(Memoization)하여 불필요한 리렌더링을 방지하는 역할을 한다.
- 주로 성능 최적화를 위해 사용된다.
import { memo } from 'react'; const MyComponent = memo(function MyComponent({ prop1, prop2 }) => { // ... }); export default MyComponent;
- 기본적으로 컴포넌트의
props
가 변경되지 않으면 컴포넌트를 다시 렌더링하지 않는다.props
의 얕은 비교(Shallow Comparison)를 통해 이루어진다.- 얕은 비교는 기본 자료형(숫자, 문자열 등)의 경우 값을, 객체나 배열 같은 참조형 자료형의 경우 참조 주소를 비교한다.
사용 시 주의할 점
- 컴포넌트 트리의 가능한 높은 수준에 위치한 컴포넌트에만 사용한다.
- 모든 컴포넌트에
memo
를 적용하는 것은 좋지 않다.prop
값이 자주 변경되는 컴포넌트에 사용하지 않는다.memo
는prop
값을 비교하는 데 비용이 들기 때문에, 항상prop
값이 변경되는 컴포넌트에 적용하면 오히려 성능이 저하될 수 있다.
예제 코드
import { useState, memo } from "react"; // ... const Counter = memo(function Counter({ initialCount }) { log("<Counter /> rendered", 1); const initialCountIsPrime = isPrime(initialCount); const [counter, setCounter] = useState(initialCount); function handleDecrement() { setCounter((prevCounter) => prevCounter - 1); } function handleIncrement() { setCounter((prevCounter) => prevCounter + 1); } return ( // ... ); }); export default Counter;
728x90
728x90
'Programming > React' 카테고리의 다른 글
[React.js] React Router의 loader 속성 (0) | 2024.07.03 |
---|---|
[React.js] 라우터 설정 방법 (React Router) (0) | 2024.07.02 |
[React.js] 리액트에서의 상태 관리 방법 (0) | 2024.06.30 |
[React.js] <form> 요소에서 제출(Submit) 버튼 사용 시 기본 동작 막는 방법 (0) | 2024.06.28 |
[React.js] useEffect와 useCallback (0) | 2024.06.24 |
[React.js] useReducer 훅 (0) | 2024.06.07 |
[React.js] map 함수를 사용할 때 중괄호({})와 소괄호(()) (0) | 2024.05.29 |
[React.js] 토스트 메시지 띄우기 간단 예제 (ReactDOM.createPortal) (0) | 2024.05.21 |