mason
mason-log.

mason

mason.

안녕하세요. mason 입니다.

react

React.memo.

memo HOC, shallow compare, props 안정성, 언제 쓰고 언제 쓰지 않을지

React.memo는 props가 변하지 않으면 컴포넌트 리렌더를 건너뛰는 고차 컴포넌트입니다.

🔄 동작

const Row = React.memo(function Row({ item }: { item: Item }) {
  return <li>{item.name}</li>;
});
  • 부모 리렌더 시 shallow compare props → 같으면 render skip
  • custom compare: (prev, next) => boolean

✅ 효과적인 조건

  • 컴포넌트 render 비용이 큼
  • props가 자주 같음 (stable reference)
  • 부모가 자주 리렌더, 자식은 동일 props

⚠️ 함정

  • inline object/function props → 매번 새 참조 → memo 무효
  • useCallback, useMemo함께 쓸 때만 의미 (과도한 memo는 오히려 비용)
  • Context 구독 컴포넌트는 memo해도 context 변경 시 리렌더

🔗 참고 자료

  • memo — props가 같으면 리렌더를 건너뛰는 HOC를 설명한다.
  • useMemo — 값 메모이제이션으로 안정적인 props를 유지하는 방법을 설명한다.
  • useCallback — 함수 참조를 안정화해 memo와 함께 쓰는 방법을 설명한다.
  • Keeping Components Pure — 순수 렌더와 최적화의 전제를 설명한다.