[React] useCallback 그리고 React.memo

2022. 10. 27. 15:23·React/기능
반응형

React에서 UI의 성능을 증가시키기 위해서 React.memo를 제공한다. 

 

React.memo는 렌더링의 결과를 메모이징해서 새로운 렌더링이 감지될 때, props가 같다면 

메모이징한 결과를 재사용한다. 

const compoenent = React.memo(({title, content}) => {
   return (
       <div>
           <div>{title}</div>
           <div>{content}</div>
       </div>
   )
})

다음과 같은 컴포넌트가 있다면, React.memo는 title과 content가 변경되지 않는다면 

메모이징된 결과를 다시 사용한다. 

 

const ParentsComponent = () => {
   return <Component title={...} content={...} onCheck={() => anyfuntion()}/>
}

부모 컴포넌트에서 자식 컴포넌트에게 상태값만 넘겨주는 것이 아닌, 아무개 함수를 넘겨주는 경우도

있을 것이다. 

 

이때 부모 컴포넌트가 리렌더링이 되면 onCheck에 해당하는 함수도 다시 만들어진다. 

즉, 똑같은 () => anyfunction 이라도 props를 비교했을 때는 false가 나오게 된다는 뜻이다. 

 

이때 사용하는 것이 useCallback으로 useCallback을 사용하면 의존하는 값이 변경되지 않는다면 

함수를 새롭게 만들지 않는다. 

 

이런 좋은 기능은 무조건 쓰면 될까? 

보통 이런 질문이 나오면 대답은 No 가 된다. 여기서도 대답은 No이다.

 

React.memo는 같은 props로 렌더링이 많이 일어나는 컴포넌트에만 사용하는 것이 유용한다. 

부모 컴포넌트에서 같은 props로 리렌더링이 자주 발생하거나,

컴포넌트 내부에서 큰 연산이 있는 경우에 React.memo를 사용하면 이점을 누릴 수 있다. 

 

그렇다면 왜 React.memo를 난사하면 안될까? 

 

리렌더링이 발생할 때 props가 다른 경우가 대부분일텐데, props가 자주 변하는 컴포넌트를 

React.memo를 사용해서 메모이징을 하면 리렌더링이 발생할 때마다 

 

이전 props와 다음 props를 비교하는 함수를 수행하고, 다시 이전 렌더링과 다음 렌더링을 비교한다. 

즉 쓸대없는 비교를 많이하게 된다. 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'React > 기능' 카테고리의 다른 글

[React] 성능 측정하기  (0) 2022.10.28
[React] useRef 그리고 useState  (1) 2022.10.26
[React] Map을 State로 사용하기  (0) 2022.10.25
[React] 컴포넌트 합성  (1) 2022.10.21
[React] react-router-dom 사용하기  (1) 2022.10.05
'React/기능' 카테고리의 다른 글
  • [React] 성능 측정하기
  • [React] useRef 그리고 useState
  • [React] Map을 State로 사용하기
  • [React] 컴포넌트 합성
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    자바스크립트
    webpack
    프로그래머스
    CCNA
    javascript
    영어회화
    네트워크
    ReactNative
    타입스크립트
    덤프
    리얼클래스
    ChatGPT
    Node.js
    Docker
    네이버 부스트캠프
    영어독학
    바질
    react
    리액트
    바질 키우기
    타일러영어
    Babel
    다이소
    CSS
    redux
    typescript
    next.js
    알고리즘
    리얼학습일기
    식물
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
[React] useCallback 그리고 React.memo
상단으로

티스토리툴바