다음은 Christian Ekrem의 블로그 글 React.memo Demystified: When It Helps and When It Hurts의 핵심 내용을 정리한 것입니다. React 성능 최적화에 관심 있는 개발자라면 노션 등에 정리해두기 좋은 내용입니다.(cekrem.github.io)


🧠 핵심 요약

1. React.memo의 역할과 한계

예시 코드:

const MemoizedChild = React.memo(({ data, onClick }) => {
  // ...
});

function ParentComponent() {
  const data = useMemo(() => ({ value: 42 }), []);
  const onClick = useCallback(() => console.log("clicked"), []);

  return <MemoizedChild data={data} onClick={onClick} />;
}

2. React.memo 사용 시 주의할 점

문제 코드:

const Child = React.memo(({ data }) => {
  // ...
});

function Parent(props) {
  return <Child {...props} />;
}

해결 방법:

const MemoComponent = React.memo(({ children }) => {
  // ...
});

function Parent() {
  const content = useMemo(() => <div>Some content</div>, []);

  return <MemoComponent>{content}</MemoComponent>;
}

해결 방법:

const InnerChild = React.memo(() => <div>Inner</div>);
const OuterChild = React.memo(({ children }) => <div>{children}</div>);

function Parent() {
  const innerChild = useMemo(() => <InnerChild />, []);

  return <OuterChild>{innerChild}</OuterChild>;
}

3. React.memo, useMemo, useCallback의 사용 시점