1. React의 리렌더링


2. React memo


React의 컴포넌트가 React.memo()로 래핑 되면, React는 컴포넌트를 렌더링하고 그 결과를 메모이제이션한다. 다음 렌더링이 일어날 때 props가 같다면, React는 메모이제이션된 내용을 재사용한다.

export function App(){

const [title,setTitle] = useState('movie1');
const [releaseDate,setReleaseDate] = useState('2022-8-09');

}
export function Movie({releaseDate}) {
  useEffect(() => {
    console.log('rendered');
  })
  return (
    <div>
      <div>Movie title: {title}</div>
      <div>Release date: {releaseDate}</div>
    </div>
  );
}

export default memo(Movie);

3. React memo 남용


그럼에도 React memo를 남용하면 성능이 나빠질 수 있는데 React.memo는 공짜가 아니다.

예를 들어보자

const SimpleText = React.memo(({ text }: { text: string }) => {
  return <span>{text}</span>; // 렌더링이 매우 빠름 (< 1ms)
});

// 매번 렌더링 시:
// 1. 이전 props와 현재 props를 비교 (얕은 비교)
// 2. 비교 결과에 따라 렌더링 skip 여부 결정
// props 비교 비용 > 렌더링 비용
// → 오히려 더 느려짐!