⚡️ React 성능 최적화: Beyond React.memo

원문 : https://cekrem.github.io/posts/beyond-react-memo-smarter-performance-optimization/


1. React.memo는 만능이 아니다

문제 코드:

const Button = React.memo(({ onClick }: { onClick: () => void }) => {
  return <button onClick={onClick}>Click</button>;
});

function Parent() {
  const [count, setCount] = useState(0);
  const handleClick = () => {
    console.log('clicked');
  };

  return (
    <>
      <div>{count}</div>
      <Button onClick={handleClick} />
    </>
  );
}

개선 코드:

const Button = React.memo(({ onClick }: { onClick: () => void }) => {
  return <button onClick={onClick}>Click</button>;
});

function Parent() {
  const [count, setCount] = useState(0);
  const handleClick = useCallback(() => {
    console.log('clicked');
  }, []);

  return (
    <>
      <div>{count}</div>
      <Button onClick={handleClick} />
    </>
  );
}

→ 하지만 궁극적으로는 구조적으로 리렌더링을 줄이는 게 더 효과적이다.


2. 상태를 하위 컴포넌트로 이동하기

문제 코드:

function App() {
  const [open, setOpen] = useState(false);

  return (
    <>
      <button onClick={() => setOpen(true)}>Open Modal</button>
      <Modal open={open} />
    </>
  );
}

개선 코드:

function App() {
  return <ModalTrigger />;
}

function ModalTrigger() {
  const [open, setOpen] = useState(false);

  return (
    <>
      <button onClick={() => setOpen(true)}>Open Modal</button>
      {open && <Modal />}
    </>
  );
}