useCallback 과 useMemo

2022. 6. 4. 16:12·프론트엔드/React

useCallback

얘는 인자로 전달된(콜백 함수) 애의 메모이제이션된 애를 반환한다. 걔는 콜백의 의존성이 변경되었을 때만 변화된다.

형태

const memoizedCallback = useCallback(() => {doSomething(a,b)}, [a,b])

활용

React.memo의 경우 props(혹은 state, context)가 변화될 때만 다시 렌더링하도록 되어있다.

얘한테 함수를 prop으로 전달할 경우

<Jasik hamsu={()=>{console.log('hi')}}/> /// jasik은 memoized된 component

  매번 부모가 다시 렌더링 되면 함수도 다시 생성하고, 그래서 jasik은 prop이 계속 바뀐 걸로 인식해서 계속 다시 렌더링한다. 이런 불필요한 렌더링을 줄이기 위해서

<Jasik hamsu={useCallback(()=>{console.log('hi')},[])}/> /// jasik은 memoized된 component

이런 식으로 useCallback을 사용해주면 Jasik은 불필요한 렌더링을 하지 않는다. 이럴 때 활용하기 좋다.

아직 제대로 사용해보지는 않았는데, 이미지 편집기 리팩토링할 때 적용하면 불필요한 렌더링을 많이 줄일 수 있을 것 같다.

useMemo

얘는 useCallback과 비슷한데, 메모이제이션된 값을 반환한다. 그래서 의존성 값 배열의 값이 변경될 때만 다시 계산해서 반환한다.

형태

const memoizedValue = useMemo(() => compute(a,b),[a,b])

활용

뭔가 반복적으로 계속 계산하는 그런 함수들을 얘로 덮어씌워주면 오버헤드가 많이 줄어들 것 같다. -> 성능 최적화

프로젝트에 적용해보면서 내용을 추가하겠다.

 

2가지 쓸 때 주의사항

위에 2 애를 쓸 때 안에다가 sideEffects를 넣지 말자. sideEffects는 useEffect 에서 다 관리해야된다.

저작자표시 (새창열림)

'프론트엔드 > React' 카테고리의 다른 글

커스텀 훅 적용하기 - 팝업(모달)  (0) 2022.07.02
HOC  (1) 2022.06.04
Memoization  (0) 2022.06.04
useContext  (0) 2022.05.14
useReducer  (0) 2022.05.14
'프론트엔드/React' 카테고리의 다른 글
  • 커스텀 훅 적용하기 - 팝업(모달)
  • HOC
  • Memoization
  • useContext
정현우12
정현우12
  • 정현우12
    정현우의 개발 블로그
    정현우12
  • 전체
    오늘
    어제
    • 분류 전체보기 (79)
      • 프론트엔드 (56)
        • JavaScript, TypeScript (12)
        • 스타일링 (1)
        • React (13)
        • Next.js (4)
        • 개발 환경 (9)
        • 테스트 (3)
        • 성능 최적화 (11)
        • 함수형 프로그래밍 (2)
        • 구조 (1)
      • 프로젝트 회고 (23)
        • 이미지편집기 개발 (7)
        • 엑셀 다운로드, 업로드 공통 모듈 개발 (4)
        • 사용자 매뉴얼 사이트 개발 (3)
        • 통계자동화 솔루션 개발 (1)
        • 엑셀 편집기 개발 (5)
        • API 플랫폼 (1)
        • 콜센터 솔루션 OB 캠페인 (1)
        • AI 스튜디오 (1)
      • 백엔드 (0)
  • 블로그 메뉴

    • 홈
    • 포트폴리오
    • 태그
  • 인기 글

  • 태그

    Next.js
    Github Actions
    렌더링 성능 최적화
    사용자 매뉴얼 사이트
    웹 성능 최적화
    엑셀 에디터
    React
    frontend
    JavaScript
    webpack
    회고
    memoization
    커스텀 훅
    TypeScript
    이미지 편집기
    라이브러리 선정
    React-boilerplate
    로딩 성능 최적화
    useReducer
    엑셀
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
정현우12
useCallback 과 useMemo
상단으로

티스토리툴바